Ant*_* O. 17 javascript stack-trace node.js
在我的NodeJS程序中,我解析了一些用户JSON文件.
所以我使用:
this.config = JSON.parse(fs.readFileSync(path));
Run Code Online (Sandbox Code Playgroud)
问题是如果json文件没有正确格式化,抛出的错误就像:
undefined:55
},
^
SyntaxError: Unexpected token }
at Object.parse (native)
at new MyApp (/path/to/docker/lib/node_modules/myApp/lib/my-app.js:30:28)
...
Run Code Online (Sandbox Code Playgroud)
由于它不是真正的用户友好,我想抛出一个Error
指定一些用户友好的消息(如"你的配置文件没有很好的格式化"),但我想保持堆栈跟踪,以指向有问题的行.
在我使用的Java世界throw new Exception("My user friendly message", catchedException)
中,为了得到导致那个的原始异常.
JS世界怎么可能?
Ant*_* O. 25
我最后做的是:
try {
this.config = JSON.parse(fs.readFileSync(path));
} catch(err) {
var newErr = new Error('Problem while reading the JSON file');
newErr.stack += '\nCaused by: '+err.stack;
throw newErr;
}
Run Code Online (Sandbox Code Playgroud)
Seb*_*ber 10
ECMAScript 有一个新的错误原因提案,并在 TC34 上达到了阶段 4!
这意味着它将出现在下一个 ECMAScript 版本中!
https://github.com/tc39/proposal-error-cause
您可以将原因作为错误选项提供:
throw new Error(`Couldn't parse file at path ${filePath}`, { cause: err });
Run Code Online (Sandbox Code Playgroud)
ES 提案仅在语言级别上将其形式化,但浏览器/NodeJS 通常应同意在实践中记录完整的因果链(请参阅https://github.com/nodejs/node/issues/38725)
截至今天(2021 年底),Firefox Devtools 已经能够记录嵌套堆栈跟踪!
归档时间: |
|
查看次数: |
4457 次 |
最近记录: |