Node.jsで未処理の例外によるプログラムの異常終了を防ぐ
2016/06/18
未処理の例外が発生するとデフォルトでは標準エラー出力にスタックトレースが出力され、プログラムが終了します。
しかし、例外が発生しただけでプログラムが終了してしまうのは問題がある場合があり、そのような場合にはプログラムが終了しないようにしなければなりません。
未処理の例外によるプログラムの異常終了を防ぐにはprocess
オブジェクトのuncaughtException
イベントにイベントハンドラを登録します。
これにより、未処理の例外が発生するとデフォルトの動作の代わりにこのイベントハンドラが呼び出されるようになります。
ただし、このイベントハンドラの実行中に未処理の例外が発生した場合にはデフォルトの動作となります。すなわち、その場合にはプログラムが終了してしまうので注意してください。
なお、uncaughtException
イベントにイベントハンドラを登録することによりプログラムの異常終了を防ぐことはできますが、例外が発生する直前に実行されていた処理は中断されますので注意してください。
サンプルコード1
▼process-uncaught-exception.js
process.on('uncaughtException', function (err) {
console.error('unhandled exception has occured.');
console.error(err);
});
setTimeout(function () {
console.log('displayed.');
}, 1000);
throw new Error('error');
console.log('not displayed.');
▼実行結果
C:\work\node>node process-uncaught-exception.js
unhandled exception has occured.
Error: error
at Object.<anonymous> (C:\work\node\process-uncaught-exception.js:10:7)
at Module._compile (module.js:541:32)
at Object.Module._extensions..js (module.js:550:10)
at Module.load (module.js:458:32)
at tryModuleLoad (module.js:417:12)
at Function.Module._load (module.js:409:3)
at Function.Module.runMain (module.js:575:10)
at startup (node.js:160:18)
at node.js:449:3
displayed.
関連

スポンサーリンク