2016-07-03 3 views
1

私はエクスプレスを使用しています。どのようにリソースが呼び出されたかに基づいてexpressでのエラー処理が行われますか?

私は以下のようなGetリクエストを処理しています。

router.get('/user', user.getSessionInfo); 

私はAngularjsを使用しています。

リソースがどのように呼び出されているかに基づいて、エラーハンドリングをカスタマイズしたいと思っています。つまり、/ httpが呼び出されたとき、またはブラウザURLから直接呼び出されたときです。 jsonエラーobjまたはエラーページ(html)。

私はコールがAJAXであるかどうかが、私はそう

はX-要求-でヘッダ$ http.get経由を得ていない)の両方の場合で偽取得していますかどうかを決定するためにreq.xhrを使用してみました私の機能を実現するために、私は、Ajax、それは

"application/json, text/plain, */*" 

とするとき、ブラウズから呼び出されるコールからのよう

req.headers['accept']; 

に依存することはできますRのURLバーには、それが

"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" 

最高の私のやり方ですか、それを処理するより良い方法があるだろうか?

+1

それを取得する方法を、あなたは、発信者は、彼らが欲しいのではなく推測戻り値のタイプを指定していなければなりませんそれがどのように呼び出されたかに基づいています。これは、暗黙的な振る舞いに基づいた文書化されていない振る舞いになり、どのAPIでもぶつかるべきです。代わりに、呼び出し元にURLパス自体またはサーバーにどのタイプのエラー応答が必要かを指示するクエリパラメータのいずれかを引数として指定します。推測しないでください。それを明示的にする。 – jfriend00

+0

こんにちは、返信ありがとう、私はいくつかのルートの名前を変更する必要があると思います。ユーザーからuser.jsonへ、正しい形式でエラーを表示するには、errorHandlerで.jsonを確認してください。私は一般的なerrorHandlerのためにこの質問をしました。なぜなら、常にhtmlページを返すルートがいくつかあり、そのエラーはhtmlページになるからです。返信いただきありがとうございます。 – Mozak

答えて

0

あり、リソースタイプを決定する別の方法、使用クエリのparam(ドット拡張子)は、次のとおりです。

GET /api/user.json 
GET /api/user.html 
GET /api/user.xml 

、この溶液は、Expressで達成することはより複雑であるよりも、それはそうです。

+0

返信ありがとう、私はここでいくつかのルートの名前を変更する必要があると思います。 – Mozak

+0

req.pathを使用して、.jsonの部分を抽出し、エラーの応答を決定する必要がありますか? – Mozak

+0

@Mozakこれは仕事になります*/api/use:ext * – TommyLike