UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Node.js】uncaughtExceptionでエラーハンドリング

Node.jsのアプリケーションで、どの例外処理にもキャッチされずにprocessまで来てしまったエラーをキャャッチしてプロセスが落ちないようにしたい

そこで、uncaughtExceptionというのを知ったので調べた

nodejs.org

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では複数のプロセスとスーパーバイザーなどの使用をお勧めしている