ルートが人間と機械の両方のニーズを満たすようにしたいので、クライアントから要求されたタイプが JSON か HTML かを確認したいと思います。
次の場所にある Express 3 のドキュメントを読みました。
そして、次のように使用されるreq.accepts()
との2 つのメソッドがあります。req.is()
req.accepts('json')
また
req.accepts('html')
これらは正常に機能していないため、次を使用してみました。
var requestType = req.get('content-type');
また
var requestType = req.get('Content-Type');
requestType
は常にundefined
...
このスレッドの提案を使用する:
どちらも機能しません。私は何を間違っていますか?
編集 1 : クライアントの HTML ネゴシエーションが正しいことを確認しました。これが私の2つの異なるリクエストヘッダーです(デバッガーインスペクターから取得):
HTML :
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
JSON :
Accept: application/json, text/javascript, */*; q=0.01
解決策(Bretに感謝):
Acceptヘッダーを間違って指定していたことが判明し、それ*/*
が問題でした。これが機能するコードです!
//server (now works)
var acceptsHTML = req.accepts('html');
var acceptsJSON = req.accepts('json');
if(acceptsHTML) //will be null if the client does not accept html
{}
私は JSTREE を使用しています。これは、下で jQuery Ajax 呼び出しを使用する jQuery プラグインです)。Ajax 呼び出しに渡されるパラメーターは「ajax」フィールドにあり、「accepts」パラメーターを完全な「headers」オブジェクトに置き換えました。現在は動作しており、プレーンな jQuery を使用しているときに問題が発生した場合は、問題を解決する必要があります。
//client
.jstree({
// List of active plugins
"plugins" : [
"themes","json_data","ui","crrm","cookies","dnd","search","types","hotkeys","contextmenu"
],
"json_data" : {
"ajax" : {
// the URL to fetch the data
"url" : function(n) {
var url = n.attr ? IDMapper.convertIdToPath(n.attr("id")) : "<%= locals.request.protocol + "://" + locals.request.get('host') + locals.request.url %>";
return url;
},
headers : {
Accept : "application/json; charset=utf-8",
"Content-Type": "application/json; charset=utf-8"
}
}
}
})