2013-04-11 60 views
57

我正在使用NodeJS和Express。我該如何區分普通的瀏覽器請求和AJAX請求?我知道我可以檢查請求標題,但Node/Exprsss是否公開這些信息?使用Express在NodeJS上檢測AJAX請求

+3

我總是安慰。 log()req對象。這樣我可以檢查它包含的許多有用的對象。 – 2013-04-11 10:13:34

+1

@AkshatJiwanSharma我也開始這樣做了,以爲我之前沒有使用這種技術是瘋狂的! – sharkman 2013-07-18 18:48:43

回答

102

大多數框架設置X-Requested-WithXMLHttpRequest,爲表達有一個測試:

app.get('/path', function(req, res) { 
    var isAjaxRequest = req.xhr; 
    ... 
}); 
+0

正是我想要的,謝謝。 – michael 2013-04-11 09:47:57

+9

以及**不設置它的框架是什麼?像AngularJS一樣? – 2015-02-16 11:30:59

35

萬一req.xhr沒有設置,在框架如Angularjs,where it was removed說,那麼你也應該檢查頭部是否可以接受JSON響應(或XML,或者任何您的XHR作爲響應而不是HTML發送)。

if (req.xhr || req.headers.accept.indexOf('json') > -1) { 
    // send your xhr response here 
} else { 
    // send your normal response here 
} 

當然,你將不得不微調第二部分以匹配你的用例,但這應該是一個更完整的答案。

理想情況下,角隊不應該刪除它,但實際上應該已經找到了CORS」飛行前的問題更好的解決方案,但它是如何掌握現在...

+0

我也喜歡鏈接中建議的解決方案:如果您依賴此功能,只需將'X-Requested-With'添加回'$ httpProvider'。 – robertklep 2015-02-16 15:49:16

+0

是的,這是一種方式,但是爲了防止其他框架與懶惰的開發者一起被發現,那麼對他們來說:) – 2015-02-17 07:10:42

+0

對於內部使用的API,我確實認爲添加回頭是正確的。如果你的API將被其他人使用,儘管運氣確實如此。儘管您也可以要求開發人員添加此標題:開發人員應該足夠聰明,能夠做到這一點。 – 2016-01-22 15:24:21

相關問題