AS asp.net MVCに例外フィルターがありますが、node.jsにもExpress 4と同様の機能がありますか?
以下の記事を試しましたが、望ましい解決策が見つかりませんでした。
http://www.nodewiz.biz/nodejs-error-handling-pattern/
私はapp.jsでも以下を試しました
process.on('uncaughtException', function (err) {
console.log(err);
})
参照記事: http://shapeshed.com/uncaught-exceptions-in-node/
どんな助けでもありがたいです。
エラーはさまざまな場所で発生および捕捉される可能性があるため、すべてのタイプのエラーを処理する集中型オブジェクトでエラーを処理することをお勧めします。たとえば、次の場所でエラーが発生する可能性があります。
1.WebリクエストでSYNCエラーが発生した場合のExpressミドルウェア
app.use(function (err, req, res, next) {
//call handler here
});
2.CRONジョブ(スケジュールされたタスク)
3.初期化スクリプト
4.テストコード
5.どこかからキャッチされないエラー
process.on('uncaughtException', function(error) {
errorManagement.handler.handleError(error);
if(!errorManagement.handler.isTrustedError(error))
process.exit(1)
});
6.未処理の約束の拒否
process.on('unhandledRejection', function(reason, p){
//call handler here
});
次に、エラーをキャッチしたら、それらを集中型エラーハンドラーに渡します。
module.exports.handler = new errorHandler();
function errorHandler(){
this.handleError = function (error) {
return logger.logError(err).then(sendMailToAdminIfCritical).then(saveInOpsQueueIfCritical).then(determineIfOperationalError);
}
詳細について こちらの箇条書き4 'を参照 (+その他のベストプラクティスと35を超える引用符とコード例)
Expressでは、catch allエラーハンドラーをアタッチするのが標準的な方法です。ベアボーンのエラーハンドラは次のようになります。
_// Handle errors
app.use((err, req, res, next) => {
if (! err) {
return next();
}
res.status(500);
res.send('500: Internal server error');
});
_
これに加えて、エラーが発生する可能性のある場所でエラーをキャッチし、next()
にパラメータとして渡す必要があります。これにより、catch allハンドラーがエラーを確実にキャッチします。