我在Node.js v.0.10.12中使用异常对象时遇到问题。
代码:(test.js)
var _ = require('underscore');
var invalidJson = '{ this is bad }';
try {
JSON.parse( invalidJson );
}
catch (exc) {
var keys = Object.keys(exc);
console.log('Exception keys (' + keys.length + '): ', keys);
_.each(exc, function (value, key) {
console.log('exc[' + key + '] = ' + value);
});
throw exc;
}
输出:
Exception keys (0): []
test.js:21
throw exc;
^
SyntaxError: Unexpected token t
at Object.parse (native)
at Object.<anonymous> (test.js:10:7)
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
为什么异常是空对象?
此外,报告的错误来自test.js:21,但实际上是'invalidJson':1。首先不捕获异常会收到此错误消息:
undefined:1
{ this is bad }
^
SyntaxError: Unexpected token t
如何在重新抛出异常时“转发”此信息?
答案 0 :(得分:0)
Object.keys
尊重无法使用的属性,请使用
var keys = Object.getOwnPropertyNames(exc);
答案 1 :(得分:0)
在这种情况下,Exception的属性是['stack','arguments','type','message']。
剩下的是堆栈跟踪。 'stack'是一个字符串:
SyntaxError: Unexpected token t
at Object.parse (native)
at Object.<anonymous> (test.js:10:7)
.....
这是使用try {} catch {},
捕获异常的时候但是如果删除了这个try / catch,并让系统处理,它会输出一个更有用的堆栈跟踪:
undefined:1
{ this is bad }
如何使用try {} catch {}获取此堆栈跟踪?