繁体   English   中英

Node.js:如何检查错误?

[英]Node.js: how to inspect errors?

当我登录到控制台时,我对Node.js Error对象感到很困惑......
举个例子,我有这个代码:

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

有时它会因为ECONNRESET错误而出错......到目前为止ECONNRESET很好。
console.error() (或console.log() )格式是这样的:

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

我无法理解打印的格式:为什么“错误:套接字挂断”是方括号? 它是一个对象吗? 一劳永逸:如何检查错误对象,以便查看所有单独的属性?

更新:@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对象:没有键,但是有内容...... :-(

请求返回的错误类型是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开关运行节点并使用debugger关键字创建断点。 即修改您的代码如下:

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

然后按如下方式运行节点:

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

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

Fyi,对于图形替代方案,您可以尝试使用node-inspector ,您可以使用以下命令安装:

npm install -g node-inspector

然后运行

node-debug server.js

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

HTH。

你也可以使用:

console.dir(err);

https://developer.mozilla.org/en-US/docs/Web/API/Console/dir

更新:

这是关于Error对象的文档:

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

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

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

给: [TypeError: Bla Bla Bla]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM