如何区分使用express的Node.js中的HTTP请求和XML HTTP请求?
问题描述:
在我的代码出于某种原因,我想区分正常的HTTP请求和AJAX请求(即XML HTTP请求)。如何区分使用express的Node.js中的HTTP请求和XML HTTP请求?
搜索了很多后,我尝试使用req.isXMLHttpRequest
,但对于这两种类型的请求,它都会返回undefined
。
现在我通过增加每一个标志和每一个HTTP请求为isAjax
与真正或假值处理它。
问题:什么是最好的建议方式?
要使用添加标志(
isAJAX
)每个XML HTTP请求(有真或假)找出并修复
req.isXMLHttpRequest
相关的问题。
将有很大的帮助,如果有人告诉我,为什么req.isXMLHttpRequest
正在恢复undefined
?
高级感谢
注:我使用Node.js的版本0.8.20和快递版本3.1.0
答
你可以试试这个。
req.xhr
如果它是一个XMLHttpRequest,它将返回true或false。
答
正在关注@scartag答案。 如果您控制发送请求的人(例如,它是您的客户端代码),那么您只需设置HTTP标头X-Requested-With: xmlhttprequest
或更改主体/网址以标记xhr请求。
如果你不控制谁发送请求,你不能依靠req.xhr
那么你的选择取决于你的用例。例如,如果你只想回应一个适合于请求的内容,那么res.format(_)
可能比req.xhr
更有用(它取决于你的客户端,但你可以假设客户端不会请求他们无法处理的格式)。
'req.xhr'工作。但为什么不'req.isxmlhttprequest'。自从它记录了http://expressjs.com/2x/guide.html#req.isxmlhttprequest。 – 2013-02-23 08:16:16
@AmolMKulkarni你应该使用当前的指南http://expressjs.com/api.html#req.xhr我认为你正在看的版本指南是2.x,而你正在使用3.x – scartag 2013-02-23 08:17:37
请注意,req.xhr只需检查一个特定的请求头,它不会被浏览器自动添加到每个XMLHttpRequest中,而只会被一些JavaScript框架所添加。 – 2013-04-16 01:10:50