req.wantsJSON
一个标志,指示请求客户端是否更喜欢 JSON 响应(而不是其他格式,例如 XML 或 HTML)。
req.wantsJSON
由 Sails 中所有 内置自定义响应 使用。
req.wantsJSON;
req.wantsJSON
的预期目的是提供一个清晰、可重用的指示,表明服务器应该以 JSON 响应还是发送其他内容。它并非解决所有内容协商问题的正确答案,但它是一个简单易用的解决方案,适用于大多数用例。
例如,所有主要的浏览器都为在 URL 字段中输入的请求设置了一个 "Accept: text/plain;" 请求头。在这种情况下,req.wantsJSON
为 false。然而,在许多其他情况下,区别并不那么明显。在这些情况下,Sails 使用启发式算法来确定 req.wantsJSON
的最佳值。
从技术上讲,req.wantsJSON
检查请求的 "Content-type"
、"Accepts"
和 "X-Requested-With"
头部,以确定请求是否期望 JSON 响应。如果这些头部中的信息过于稀疏,Sails 会倾向于 JSON,并将 req.wantsJSON
设置为 true
。
req.wantsJSON
的好处是,它使您的应用程序具有未来可扩展性,并使其更不易出错。随着内容协商的最佳实践随着时间的推移而改变(例如,新型消费设备或企业用户代理引入了新的头部),Sails 可以在框架级别修补 req.wantsJSON
,并相应地修改启发式算法。它还减少了代码重复,并省去了您手动检查每个路由中头部的麻烦。
if (req.wantsJSON) {
sails.log('This request wants JSON!');
}
else {
// `req.wantsJSON` is falsy (undefined), to this request must not want JSON.
}
以下是 req.wantsJSON
检查请求的具体顺序。如果以下任何一项匹配,则后续检查将被忽略。
如果请求 "wantsJSON":
req.options.wantsJSON
为真值
- 当然,仍然可以使用
req.is()
、req.accepts()
、req.xhr
和req.get()
进行更低级别的内容协商。- 从 Sails v0.10 开始,来自 WebSocket 客户端的请求始终想要 JSON。