4

次のようにexpressでエラー処理ミドルウェアを定義すると、次のようになります。

app.use(function(err,req,res,next){
    // Do Stuff
});

エラーのHTTPステータスコードを取得するにはどうすればよいですか(または、500であると想定します)?

ありがとう、
アリ

4

2 に答える 2

8

つまり、コードは、エラー処理ミドルウェア内で処理している特定のエラーに基づいて、適切なエラー コードを決定する必要があります。

この時点で HTTP ステータス コードが生成されるとは限りません。慣例によりnext(error)、ミドルウェア関数またはルーター ハンドラー関数から呼び出すときは、codeプロパティを配置して、エラー処理ミドルウェアが実行できるようres.status(err.code || 500).render('error_page', error);にします。ただし、このアプローチを一般的な 404 エラーに使用するか、5XX サーバー エラーのみに使用するかは、あなた次第です。Express 自体またはほとんどのミドルウェアでは、エラーをnextコールバックに渡すときに http ステータス コードを提供するものはほとんどありません。

具体的な例として、データベースに既に登録されていることがわかった電子メール アドレスを使用して、誰かがアプリにユーザー アカウントを登録しようとしたとしますreturn next(new AlreadyRegistered());。AlreadyRegistered コンストラクター関数がthis.code = 409; //Conflictエラー インスタンスにプロパティを配置する場所で、エラー処理を行うことができます。ミドルウェアはその 409 ステータス コードを送信します。(この「通常の動作条件」エラーに対して、通常のルーティング チェーンでこれを処理するよりも、エラー処理ミドルウェアを使用する方が良いかどうかは、設計の観点から議論の余地がありますが、それでもこの例が説明に役立つことを願っています)。

参考までに、適切な名前のラッパー クラスにプロパティを提供するhttperrors npm モジュールもお勧めしstatusCodeます。私はこれをいくつかのプロジェクトで効果的に使用しました。

于 2013-03-10T01:23:09.823 に答える