2013-02-23 139 views
0

在我的代码出于某种原因,我想区分正常的HTTP请求和AJAX请求(即XML HTTP请求)。如何区分使用express的Node.js中的HTTP请求和XML HTTP请求?

搜索了很多后,我尝试使用req.isXMLHttpRequest,但对于这两种类型的请求,它都会返回undefined

现在我通过增加每一个标志和每一个HTTP请求为isAjax真正值处理它。

问题:什么是最好的建议方式?

  1. 要使用添加标志(isAJAX)每个XML HTTP请求(有

  2. 找出并修复req.isXMLHttpRequest相关的问题。

将有很大的帮助,如果有人告诉我,为什么req.isXMLHttpRequest正在恢复undefined

高级感谢

注:我使用Node.js的版本0.8.20快递版本3.1.0

回答

3

你可以试试这个。

req.xhr 

如果它是一个XMLHttpRequest,它将返回true或false。

+0

'req.xhr'工作。但为什么不'req.isxmlhttprequest'。自从它记录了http://expressjs.com/2x/guide.html#req.isxmlhttprequest。 – 2013-02-23 08:16:16

+1

@AmolMKulkarni你应该使用当前的指南http://expressjs.com/api.html#req.xhr我认为你正在看的版本指南是2.x,而你正在使用3.x – scartag 2013-02-23 08:17:37

+1

请注意,req.xhr只需检查一个特定的请求头,它不会被浏览器自动添加到每个XMLHttpRequest中,而只会被一些JavaScript框架所添加。 – 2013-04-16 01:10:50

1

正在关注@scartag答案。 如果您控制发送请求的人(例如,它是您的客户端代码),那么您只需设置HTTP标头X-Requested-With: xmlhttprequest或更改主体/网址以标记xhr请求。

如果你不控制谁发送请求,你不能依靠req.xhr那么你的选择取决于你的用例。例如,如果你只想回应一个适合于请求的内容,那么res.format(_)可能比req.xhr更有用(它取决于你的客户端,但你可以假设客户端不会请求他们无法处理的格式)。