Node.js:如何检查错误

Node.js: how to inspect errors?

本文关键字:检查 错误 何检查 js Node      更新时间:2023-09-26

我对Node.js Error对象感到非常困惑,当登录到控制台时…
例如,我有这样的代码:

request(
  options,
  function (err, response, contents) {
    if (err) {
      console.error('error in request:', err);
    }
    success(contents);
  },
);

有时它会因为ECONNRESET错误而出错…到目前为止一切顺利。
console.error()(或console.log())格式如下:

[Error: socket hang up] code: 'ECONNRESET'

我不能理解打印的格式:为什么"Error: socket hang up"在方括号中?它是一个物体吗?一劳永逸:我如何检查错误对象,以便我可以看到所有单独的属性?

更新:按照@chriskelly的回答,在调试模式下运行节点后,我得到:

debug> repl
Press Ctrl + C to leave debug repl
> typeof err
'object'
> Object.keys(err)
[]
> console.dir(err)
< [Error: socket hang up] code: 'ECONNRESET'

我一直不理解err对象:没有键,但它有内容…: - (

也可以使用:

console.dir(err);
https://developer.mozilla.org/en-US/docs/Web/API/Console/dir

更新:

这是一个关于错误对象的文档:

https://nodejs.org/api/errors.html

在方括号中Error显示类型和消息。Type是错误类,message是传递给错误构造函数的参数。

var e = new TypeError("Bla Bla Bla");
console.log(e);

给出:[TypeError: Bla Bla Bla]

请求返回的错误类型是一个error对象:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error

它的属性之一是一个名为properties的数组,第二个条目包含您在方括号中看到的文本。Javascript可以指定不同程度的可见性,一些自定义对象(如Error)设置了这些属性:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties

尝试使用debug开关运行node,并使用debugger关键字创建断点。即修改代码如下:

if (err) {
    console.error(err)
    debugger;
}

然后按如下命令运行node:

node debug server.js
  1. 节点将在第一行中断,所以输入'c'继续。
  2. 当它停在上面一行时,输入repl (代表read, eval, print, loop)来检查变量例如:键入

    Object.keys(err)检查err的属性(假设它是一个对象)

供参考,对于图形替代,您可以尝试node-inspector,您可以安装:

npm install -g node-inspector

然后运行

node-debug server.js

您的代码将在Chrome中打开,并为您提供在前端调试期间可用的相同工具。

HTH .