我在Express上使用NodeJS。如何分辨普通浏览器请求和AJAX请求之间的区别?我知道我可以检查请求标头,但是Node / Exprsss是否公开此信息?
Answers:
大多数框架将X-Requested-With
标头设置XMLHttpRequest
为,Express对此进行了测试:
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
}
当然,您必须对第二部分进行一些微调以匹配您的用例,但这应该是一个更完整的答案。
理想情况下,角度小组不应该删除它,但实际上应该为CORS的飞行前问题找到更好的解决方案,但这就是现在的情况……
X-Requested-With
回$httpProvider
。
req.xhr
通过将其添加到您的角度应用程序配置中来处理AngularJS请求: $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';