Node.js での処理中に何かエラーが発生した場合、そのエラーをハンドルするコードがないと、デフォルトではスタックトレースが表示されて処理が終了します。
明示的にエラーをハンドルするには、try
~ catch
の構文を使用します(Node.js 特有ではなく、通常の JavaScript の構文です)。
以下の例では、未定義の関数を呼び出したときに発生する ReferenceError
をハンドルしています。
try {
foo();
} catch (err) {
console.log(err.name + ': ' + err.message);
process.exit(-1);
}
ReferenceError: foo is not defined
コールバック関数に渡される Error
オブジェクトは、V8 (JavaScript Engine) でネイティブに定義されているオブジェクトで、以下のようなプロパティを参照できます。
err.name
→ エラー名err.message
→ エラーメッセージerr.toString()
→ err.name
+ “: “ + err.message
err.stack
→ スタックトレースReferenceError
foo is not defined
ReferenceError: foo is not defined
ReferenceError: foo is not defined
at Object.<anonymous> (/Users/maku/sample.js:2:5)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
エラーの種類 (err.name
) ごとに、ハンドル処理を切り替えるには、例外を catch
したときに取得するオブジェクトの種類を instanceof
で調べます。
try {
foo();
} catch (err) {
if (err instanceof ReferenceError) {
// ...
} else {
// ...
}
}