次のようにexpressでエラー処理ミドルウェアを定義すると、次のようになります。
app.use(function(err,req,res,next){
// Do Stuff
});
エラーのHTTPステータスコードを取得するにはどうすればよいですか(または、500であると想定します)?
ありがとう、
アリ
次のようにexpressでエラー処理ミドルウェアを定義すると、次のようになります。
app.use(function(err,req,res,next){
// Do Stuff
});
エラーのHTTPステータスコードを取得するにはどうすればよいですか(または、500であると想定します)?
ありがとう、
アリ
つまり、コードは、エラー処理ミドルウェア内で処理している特定のエラーに基づいて、適切なエラー コードを決定する必要があります。
この時点で 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
ます。私はこれをいくつかのプロジェクトで効果的に使用しました。