私はExpressアプリケーション内で実行されているES6約束ベースのコードをたくさん持っています。捕捉されないエラーがある場合、私はそれに対処するために次のコードを使用しています。Expressアプリケーションで処理されなかった拒否
process.on('unhandledRejection', function(reason, p) {
console.log("Unhandled Rejection:", reason.stack);
process.exit(1);
});
これはデバッグのためにうまくいきます。
しかし、私は500エラーハンドラをトリガして、ユーザに標準の「何かが間違っている」ページを表示したいと思います。
app.use(function(error, req, res, next) {
res.status(500);
res.render('500');
});
それは非同期だとError: Can't render headers after they are sent to the client.
でoffen結果は、私がレンダリングに行くかどうとして動作しませんミドルウェア内unhandledRejectionを置く:私はこのキャッチに現在他の例外のために働くすべてのエラーハンドラを持っていますunhandledRejection
の500ページ?
readFile() .then(readAnotherFile) .then(doSomethingElse) .then(...)
はあなたの約束鎖の末端に.catch(next)
を追加し、エクスプレスのミドルウェアが正常に使用して、両方の同期/非同期コードを処理します:あなたはエクスプレスなどのようないくつかの約束ベースのコードを使用していると仮定すると
私たちは常にエラーを処理するために 'next'を使い、約束の拒否のためのグローバルエラーハンドラはありません(これはとても悪いです! –