使用 Express 检测 NodeJS 上的 AJAX 请求
Posted
技术标签:
【中文标题】使用 Express 检测 NodeJS 上的 AJAX 请求【英文标题】:Detecting AJAX requests on NodeJS with Express 【发布时间】:2013-04-03 10:21:50 【问题描述】:我将 NodeJS 与 Express 一起使用。如何区分普通浏览器请求和 AJAX 请求?我知道我可以检查请求标头,但 Node/Exprsss 是否公开了这些信息?
【问题讨论】:
我总是 console.log() req 对象。这样我可以检查它包含的许多有用的对象。 @AkshatJiwanSharma 我也开始这样做了,想想我以前没有使用过这种技术真是太疯狂了! 【参考方案1】:大多数框架将X-Requested-With
标头设置为XMLHttpRequest
,Express 对此进行了测试:
app.get('/path', function(req, res)
var isAjaxRequest = req.xhr;
...
);
【讨论】:
对于那些不设置它的框架呢?喜欢 AngularJS?【参考方案2】:如果 req.xhr
未设置,例如在 Angularjs、where it was removed 等框架中,那么您还应该检查标头是否可以接受 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 团队不应该将其移除,但实际上应该为 CORS 的飞行前问题找到更好的解决方案,但现在就是这样......
【讨论】:
我也喜欢链接中建议的解决方案:如果您依赖此功能,只需将X-Requested-With
添加回$httpProvider
。
是的,这是一种方法,但以防万一发现其他框架也有同样懒惰的开发人员,那么它就是为他们准备的 :)
对于供内部使用的 API,我确实认为添加标头是正确的做法。如果您的 API 将被其他人使用,尽管确实很幸运。尽管您也可以要求开发人员添加此标头:开发人员应该足够聪明才能做到这一点。
您可以通过将 req.xhr
添加到您的 Angular 应用配置中来使 req.xhr
为 AngularJS 请求工作:$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
@kumar_harsh 他没有提供完整的代码行,但我提供了。所以我添加了一些尚未提供的信息。以上是关于使用 Express 检测 NodeJS 上的 AJAX 请求的主要内容,如果未能解决你的问题,请参考以下文章
express + nodeJS上的404错误,在正常路线上
NodeJS Express - 同一端口上的两个 NodeJS 实例(vhost)