javascript - 记录捕获的错误与 Node.js 中的未捕获错误完全相同

标签 javascript node.js error-handling console.log

假设我有以下文件 error.js:

// this is invalid code
var a: 0;

然后在我的 main.js 中,我需要该文件:

require("./error.js");

我从 Node.js 收到了一条漂亮、简单且易于理解的错误消息:

$ node main.js
/home/jfischer/error.js:2
var a: 0;
     ^

SyntaxError: Unexpected token :
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:413:25)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/home/jfischer/main.js:1:63)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)

现在让我们尝试将其包装在 try/catch block 中,并通过将 main.js 更改为打印错误:

try {
    require("./error.js");
}
catch(err) {
    console.log(err.stack);
}

但现在我们得到:

$ node main.js
SyntaxError: Unexpected token :
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:413:25)
    at Object.Module._extensions..js (module.js:452:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/home/jfischer/main.js:3:5)
    at Module._compile (module.js:434:26)
    at Object.Module._extensions..js (module.js:452:10)

我怎样才能得到更人性化的部分,指出在字符串中中断的确切文件和代码 Node 行?:

var a: 0;
     ^

Node.js documentation似乎没有暴露 stack 属性之外的任何东西; messagename 的帮助不大。

我对将错误记录到文件或其他自定义错误记录解决方案感兴趣。任何帮助将不胜感激。

最佳答案

当您使用 Node.js 4 运行代码时,信息会丢失,但在 Node.js 6 和更新版本中,即使捕获到错误,也会提供有用的信息。不再支持 Node.js 4,我想此时您不再使用它了。但如果您或任何人:使用 Node.js 6 或更新版本,您将获得所需的信息。

$ nvm use 4
Now using node v4.9.1 (npm v2.15.11)
$ node -v
v4.9.1
$ node main.js
SyntaxError: Unexpected token :
    at exports.runInThisContext (vm.js:53:16)
    at Module._compile (module.js:373:25)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/Users/trott/temp/main.js:2:1)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
$ nvm use 6
Now using node v6.15.1 (npm v3.10.10)
$ node -v
v6.15.1
$ node main.js
/Users/trott/temp/error.js:2
var a: 0;
     ^

SyntaxError: Unexpected token :
    at createScript (vm.js:56:10)
    at Object.runInThisContext (vm.js:97:10)
    at Module._compile (module.js:549:28)
    at Object.Module._extensions..js (module.js:586:10)
    at Module.load (module.js:494:32)
    at tryModuleLoad (module.js:453:12)
    at Function.Module._load (module.js:445:3)
    at Module.require (module.js:504:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/trott/temp/main.js:2:1)
$ 

关于javascript - 记录捕获的错误与 Node.js 中的未捕获错误完全相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907885/

相关文章:

javascript - jQuery 如何从表单中获取输入?

javascript - Vue中的过滤,嵌套数组

javascript - 如何验证具有不同值的多个输入

javascript - 当失败的任务使用流队列时,Gulp watch 退出

Node.js http.request 失败并显示 [错误 : getaddrinfo EADDRINFO]

javascript - 当 PassPhrase 相同时,需要 SJCL 进行相同的加密 AES 256 输出

node.js - 简单 mongo/monk findAndModify 查询的问题

javascript - 从错误中恢复

php - CakePHP - 为什么不报告错误?

c# - SQLSERVER和dot.net之间的消息限制错误