使用Express检测NodeJS上的AJAX请求

我用Express来使用NodeJS。 我怎样才能区分普通的浏览器请求和AJAX请求? 我知道我可以检查请求标题,但Node / Exprsss公开此信息?

大多数框架将X-Requested-With头部设置为XMLHttpRequest ,Express对此进行了testing:

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

如果没有设置req.xhr ,比如说在Angularjs这样的框架中, 它被删除了 ,那么你也应该检查这个头是否可以接受一个JSON响应(或者XML,或者是你的XHR作为响应而不是HTML发送的)。

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

当然,你必须稍微调整第二部分来匹配你的用例,但这应该是一个更完整的答案。

理想情况下,angular色团队不应该删除它,但实际上应该find一个CORS的飞行前问题的更好的解决scheme,但现在它是如何rest…