在throw()生成的node.js上缺少堆栈跟踪uncaughtException

时间:2013-05-23 16:17:10

标签: javascript node.js

我正在尝试捕获node.js uncaughtException的堆栈跟踪,它适用于不同的错误但不适用于throw()语句:

在异常处理时纠正堆栈跟踪:

$ cat errorFunc.js 
process.on('uncaughtException', function(exception) {
    console.log('uncaughtException occurred: ' + exception.stack);
});
MyError();

$ node errorFunc.js 
    uncaughtException occurred: ReferenceError: MyError is not defined
    at Object.<anonymous> (/home/jolcese/code/WebEnclaves/Server/errorFunc.js:5:1)
    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:901:3
$

由throw()引起的异常缺少堆栈跟踪:

$ cat errorThrow.js 
process.on('uncaughtException', function(exception) {
    console.log('uncaughtException occurred: ' + exception.stack);
});
throw('my error');

$ node errorThrow.js 
uncaughtException occurred: undefined
$

知道为什么吗?

由于 何

免责声明:我知道使用process.on('uncaughtException')是非常非常糟糕的事情,我将受到惩罚,但在此代码中使用域名不是一个选项。

1 个答案:

答案 0 :(得分:8)

JavaScript允许你扔东西。

如果要在JavaScript中抛出堆栈跟踪错误,则需要抛出Error个对象。 (specification )

此外,throw是一个操作符而不是函数。

尝试

throw new Error('my error');

有关详细信息,请参阅Mozilla开发人员网络上的the manual