情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

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.

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js