req.wantsJSON
リクエスト元のクライアントが、(XMLやHTMLのような他のフォーマットではなく)JSONレスポンスを優先するかどうかを示すフラグ。
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を要求します。
res
)