req.wantsJSON
一個旗標,表示請求用戶端是否偏好 JSON 回應(相對於其他格式,如 XML 或 HTML)。
Sails 中所有的內建自訂回應都會使用 req.wantsJSON
。
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。