2013-02-23 129 views
0

在我的代碼出於某種原因,我想區分正常的HTTP請求和AJAX請求(即XML HTTP請求)。如何區分使用express的Node.js中的HTTP請求和XML HTTP請求?

搜索了很多後,我嘗試使用req.isXMLHttpRequest,但對於這兩種類型的請求,它都會返回undefined

現在我通過增加每一個標誌和每一個HTTP請求爲isAjax真正值處理它。

問題:什麼是最好的建議方式?

  1. 要使用添加標誌(isAJAX)每個XML HTTP請求(有

  2. 找出並修復req.isXMLHttpRequest相關的問題。

將有很大的幫助,如果有人告訴我,爲什麼req.isXMLHttpRequest正在恢復undefined

高級感謝

注:我使用Node.js的版本0.8.20快遞版本3.1.0

回答

3

你可以試試這個。

req.xhr 

如果它是一個XMLHttpRequest,它將返回true或false。

+0

'req.xhr'工作。但爲什麼不'req.isxmlhttprequest'。自從它記錄了http://expressjs.com/2x/guide.html#req.isxmlhttprequest。 – 2013-02-23 08:16:16

+1

@AmolMKulkarni你應該使用當前的指南http://expressjs.com/api.html#req.xhr我認爲你正在看的版本指南是2.x,而你正在使用3.x – scartag 2013-02-23 08:17:37

+1

請注意,req.xhr只需檢查一個特定的請求頭,它不會被瀏覽器自動添加到每個XMLHttpRequest中,而只會被一些JavaScript框架所添加。 – 2013-04-16 01:10:50

1

正在關注@scartag答案。 如果您控制發送請求的人(例如,它是您的客戶端代碼),那麼您只需設置HTTP標頭X-Requested-With: xmlhttprequest或更改主體/網址以標記xhr請求。

如果你不控制誰發送請求,你不能依靠req.xhr那麼你的選擇取決於你的用例。例如,如果你只想迴應一個適合於請求的內容,那麼res.format(_)可能比req.xhr更有用(它取決於你的客戶端,但你可以假設客戶端不會請求他們無法處理的格式)。