79

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

4

2 回答 2

131

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

app.get('/path', function(req, res) {
  var isAjaxRequest = req.xhr;
  ...
});
于 2013-04-11T09:44:38.280 回答
50

如果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 的飞行前问题找到更好的解决方案,但这就是它现在的休息方式......

于 2015-02-16T11:40:20.003 回答