为什么在调用new Error()

时间:2016-03-22 18:53:34

标签: node.js error-handling visual-studio-code

我有一个服务,我用Node.js和Express编写,我遇到了一个错误没有在.stack属性上进行堆栈跟踪的问题,正如人们所期望的那样通过VSCode中的 WATCH 窗口查看错误对象时。相反,我的错误对象的堆栈属性是undefined。另外,调用console.error(err)会在 DEBUG CONSOLE 窗口中输出错误信息,但不会有任何堆栈详细信息。

我一直在查看文档,所有迹象都表明调用new Error("My message")应该创建一个Error对象,该对象具有一个堆栈,表示调用堆栈直到错误对象被实例化的位置。

我在Windows 10上使用 Node v4.2.2

1 个答案:

答案 0 :(得分:2)

Error对象在其上调用.toString()时,它不会报告堆栈,这就是console.log(err)时调用的内容。

这是因为the stack isn't generated until the .stack attribute is accessed

  

访问error.stack属性时,会延迟生成表示堆栈跟踪的字符串。

要查看完整堆栈(包括错误消息),请直接使用err.stack

console.log(err.stack)

我需要错误消息和堆栈时,在我的节点代码中执行此操作。