使用Express在NodeJ上检测AJAX请求

使用Express在NodeJ上检测AJAX请求,ajax,node.js,express,Ajax,Node.js,Express,我正在使用NodeJS和Express。如何区分普通浏览器请求和AJAX请求之间的区别?我知道我可以检查请求头,但是Node/exprss是否公开了此信息?大多数框架将X-Requested-With头设置为XMLHttpRequest,Express对此进行了测试: 如果未设置req.xhr,比如在Angularjs等框架中,那么还应该检查头部是否可以接受JSON响应(或XML,或xhr作为响应而不是HTML发送的任何内容) 当然,您必须稍微调整第二部分以匹配您的用例,但这应该是一个更完整的

我正在使用NodeJS和Express。如何区分普通浏览器请求和AJAX请求之间的区别?我知道我可以检查请求头,但是Node/exprss是否公开了此信息?

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


如果未设置
req.xhr
,比如在Angularjs等框架中,那么还应该检查头部是否可以接受JSON响应(或XML,或xhr作为响应而不是HTML发送的任何内容)

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


理想情况下,angular团队不应该删除它,但实际上应该为CORS的飞行前问题找到更好的解决方案,但现在它就是这样解决的…

我总是控制台.log()req对象。这样我可以检查它包含的许多有用对象。@AkshatJiwanSharma我也开始这样做,想到我以前没用过这种技术,真是太疯狂了!对于那些没有设置它的框架又该怎么办呢?像AngularJS?我也喜欢链接中建议的解决方案:如果您依赖此功能,只需将
X-request-With
添加回
$httpProvider
。是的,这是一种方法,但万一发现其他框架也有同样懒惰的开发人员,那么这是为他们准备的:)供内部使用的API,我相信加回头球是正确的做法。如果您的API将被其他人使用,尽管运气确实不错。虽然您也可以要求开发人员添加此标题:开发人员应该足够聪明,能够做到这一点。您可以通过将此标题添加到AngularJS应用程序配置中,使
req.xhr
适用于AngularJS请求:
$httpProvider.defaults.headers.common['X-request-With']='XMLHttpRequest'@kumar_harsh他没有提供完整的代码,但我提供了。所以我添加了一些还没有人提供的信息。
app.get('/path', function(req, res) {
  var isAjaxRequest = req.xhr;
  ...
});
if (req.xhr || req.headers.accept.indexOf('json') > -1) {
  // send your xhr response here
} else {
  // send your normal response here
}