2016-02-22 5 views
6

AS asp.net MVCに例外フィルタがありますが、同様の機能をnode.jsにExpress 4でも持っていますか?Node.jsでExceptionをグローバルに処理する最善の方法はExpress 4ですか?

私は以下の記事を試しましたが、目的の解決策が見つかりませんでした。 http://shapeshed.com/uncaught-exceptions-in-node/

すべてのヘルプはかなりのようになります。

http://www.nodewiz.biz/nodejs-error-handling-pattern/

私はまた、app.jsに以下

process.on('uncaughtException', function (err) { 
    console.log(err); 
}) 

REFの記事を試してみました。

答えて

-3

ノードにグローバル例外ハンドラを追加するには、processのイベントがあります。それらをキャッチするにはprocess.onを使用してください。

process.on('uncaughtException', (err) => { 
    console.log('whoops! there was an error'); 
}); 
+0

グローバルに例外をキャッチしません。 –

+0

@AshishKumar:キャッチしようとしているエラーは何ですか? – bolav

+0

アプリケーション全体で例外が発生した場合は、1か所から処理する必要があります。例外フィルタを使用してasp.net mvcで行うように。 –

2

明示的には、すべてのエラーハンドラをキャッチするのが標準的な方法です。 は、必要最小限のエラーハンドラは、これに伴い

// Handle errors 
app.use((err, req, res, next) => { 
    if (! err) { 
     return next(); 
    } 

    res.status(500); 
    res.send('500: Internal server error'); 
}); 

ようになり、あなたはどこでも、彼らが起こるとnext()でのparamとして渡すことができますエラーをキャッチする必要があります。これにより、catch allハンドラがエラーをキャッチすることが保証されます。

+1

私はすでにGoogleで検索し、今すぐ明示的にこのソリューションを見つけるが、私はasp.net mvcの例外フィルタのようなものを見つけることを探しています –

8

さまざまな場所からエラーが発生し、キャッチされた可能性があるため、すべてのエラーの種類を処理する集中オブジェクトでエラーを処理することをお勧めします。たとえば、エラーがかもしれない次の場所で発生します。

1.ExpressミドルウェアをSYNCエラーの場合、Webリクエスト

app.use(function (err, req, res, next) { 
//call handler here 
}); 

2.CRONジョブ(スケジュールされたタスク)

3.Yourに初期化スクリプトのどこかに

から

4.Testingコード

5.Uncaughtエラー

process.on('uncaughtException', function(error) { 
errorManagement.handler.handleError(error); 
if(!errorManagement.handler.isTrustedError(error)) 
process.exit(1) 
}); 

6.Unhandled約束拒否

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); 
    } 

read bullet 4' here( +その他のベストプラクティスと35以上の引用符とコードの例les)

関連する問題