1. ホーム
  2. node.js

node.jsをエラーで終了しないようにする

2023-09-22 06:15:07

質問

私は、Socket.IO を使用した Web ソケット指向の node.js サーバーに取り組んでいます。私は、特定のブラウザがサーバーへの正しい接続手順に従わず、コードがそれを優雅に扱うように書かれていないバグに気づきました。要するに、設定されていないオブジェクトにメソッドを呼び出し、その結果、エラーによってサーバーが停止します。

私の懸念は、特にバグについてではなく、そのようなエラーが発生すると、サーバー全体がダウンしてしまうという事実なのです。エラーが発生した場合、単にメッセージを記録し、おそらくイベントを終了しますが、サーバー プロセスは実行し続けるようにするために、node のグローバル レベルで何かできることはないでしょうか。

私は、大規模な含まれたコードベース内の捕捉されないエラーを悪用する 1 人の賢いユーザーのために、他のユーザーの接続をダウンさせたくありません。

どのように解決するのですか?

リスナーを uncaughtException イベントにリスナーを追加できます。

実際の Node.js API リファレンス (から取得したコードです。)

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

setTimeout(function () {
  console.log('This will still run.');
}, 500);

// Intentionally cause an exception, but don't catch it.
nonexistentFunc();
console.log('This will not run.');

あとはログを取るなり、何かするなり、どんな状況でバグが発生したのかわかる場合は、Socket.IOのGitHubページでバグを報告する必要があります。

https://github.com/LearnBoost/Socket.IO-node/issues