使用Express检测NodeJS上的AJAX请求

mic*_*ael 71 ajax node.js express

我正在使用NodeJS和Express.如何区分普通浏览器请求和AJAX请求?我知道我可以检查请求标头,但Node/Exprsss是否公开了这些信息?

rob*_*lep 122

大多数框架都将X-Requested-With标头设置XMLHttpRequest为,Express对其进行了测试:

app.get('/path', function(req, res) {
  var isAjaxRequest = req.xhr;
  ...
});
Run Code Online (Sandbox Code Playgroud)

  • 那些**没有设置它的框架是什么?喜欢AngularJS? (14认同)

kum*_*rsh 45

如果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
}
Run Code Online (Sandbox Code Playgroud)

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

理想情况下,有角度的团队不应该删除它,但实际上应该找到一个更好的解决方案来解决CORS的飞行前问题,但这就是它现在休息的方式......

  • 您可以通过将此添加到您的角度应用程序配置中来使`req.xhr`适用于AngularJS请求:`$ httpProvider.defaults.headers.common ['X-Requested-With'] ='XMLHttpRequest';` (8认同)
  • @kumar_harsh他没有提供完整的代码,但我做到了.所以我添加了一些人们尚未提供的信息. (4认同)