为什么调用新的 Error() 后堆栈未定义



我有一个使用 Node.js 和 Express 编写的服务,我遇到了一个问题,即错误没有像人们在 VSCode 中的 WATCH 窗口查看错误对象时所期望的那样在其.stack属性上携带堆栈跟踪。相反,我的错误对象的堆栈属性是undefined 。此外,调用 console.error(err) 会在"调试控制台"窗口中输出错误信息,但没有任何堆栈详细信息。

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

我在Windows 10上使用Node v4.2.2

当你

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

这是因为在访问 .stack 属性之前不会生成堆栈。

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

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

console.log(err.stack)

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

最新更新