Node.jsのアプリケーションで、どの例外処理にもキャッチされずにprocessまで来てしまったエラーをキャャッチしてプロセスが落ちないようにしたい
そこで、uncaughtException
というのを知ったので調べた
process.on('uncaughtException', (err, origin) => { fs.writeSync( process.stderr.fd, `Caught exception: ${err}\n` + `Exception origin: ${origin}` ); }); setTimeout(() => { console.log('This will still run.'); }, 500); // Intentionally cause an exception, but don't catch it. nonexistentFunc(); console.log('This will not run.');
err <Error>
: キャッチされなかった例外origin <string>
: 例外が未処理のrejectに起因するのか(uncaughtException)、または同期エラーに起因するのか(unhandledRejection)を示す
ここで、エラーをハンドリングすることができる
ただ、Expressのドキュメントを読むと、この方法でアプリケーションの異常終了を防止するのはあまりよくないみたい
https://expressjs.com/ja/advanced/best-practice-performance.html
(「実行してはならないこと」参照)
理由はキャッチされていない例外が発生した後にアプリケーションの実行を続けるのは危険な手法で、プロセスの状態の信頼性と予測可能性が低くなるため
この理由からExpressでは複数のプロセスとスーパーバイザーなどの使用をお勧めしている