ExpressJSの他のコールとajaxコールを区別することに問題があります。ExpressJSで正しいAccept Content-Typeを判断する方法
私が理解する限り、request.accepts('json')
を使用してjsonリクエストを識別できますか?
問題は - 明らかにすべての呼び出しがすべてを受け入れます!
app.get('*', function(request, response, next) {
console.log('request accepts:')
if(request.accepts('json')){
console.log('--> accepts json')
}
if(request.accepts('html')){
console.log('--> accepts html')
}
if(request.accepts('blah')){
console.log('--> accepts blah') // this does not show up
}
if(request.accepts('application/json')){
console.log('--> accepts json2')
}
next()
})
私はちょうどページを訪問した場合、それはJSONとHTMLを受け入れます。
$.getJSON(... url ...)
を使用しようとすると、jsonとhtmlも認識します。
Headers:
Browser: "Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
Ajax: "Accept application/json, text/javascript, */*; q=0.01"
私はインクルードは、ヘッダーを受け入れについては専門家ではないんだけど、*/*
部分が問題になる可能性があることと思われます。
ExpressJSで正しい(またはおそらく最初の)受け入れタイプを判断するにはどうすればよいですか? または、JSONリクエストを通常のページビューから区別するにはどうすればよいですか?
最初にこれを行う必要があるのはなぜだろうか。同じURLから異なるデータ型を提供する必要がある場合、ほとんどのAPIは '/ path/to/server?format = json'のようなクエリのパラメータを使用します。 – charlietfl
@charlietflこれは主にパスに依存しないミドルウェアがあるためです私はjsonベースの呼び出し中に無効にしたいと思います)。後でパスのルーティングが起きているように見えるので、あまりにも遅いので、フラグを設定することはできません。 2つのオプションがあります:ルーティングをシミュレートするミドルウェアを作成し、特定のパスが呼び出されたかどうかを確認する(meh!)か、単に受け入れたタイプをチェックします。 – Katai
jsonにしかサービスしていないREST APIを持っていると仮定すると、ルートに ''/api/"'のようなapiのメインパスが含まれているかどうかを確認できません。一般的に奇妙な問題だと思われる – charlietfl