【问题标题】:Node.js: how to inspect errors?Node.js:如何检查错误?
【发布时间】:2015-09-29 08:27:38
【问题描述】:

当登录到控制台时,我对 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'

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

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

【问题讨论】:

    标签: javascript node.js error-handling


    【解决方案1】:

    你也可以使用:

    console.dir(err);
    

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

    更新:

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

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

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

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

    给:[TypeError: Bla Bla Bla]

    【讨论】:

      【解决方案2】:

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

      其中一个属性是一个称为属性的数组,第二个条目包含您在方括号中看到的文本。 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如下:

      node debug server.js
      
      1. 节点将在第一行中断,因此键入“c”继续。
      2. 当它停在上一行时,输入repl(代表读取、评估、打印、循环)检查变量 例如输入

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

      仅供参考,对于图形替代方案,您可以尝试使用 node-inspector 进行安装:

      npm install -g node-inspector
      

      然后运行

      node-debug server.js
      

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

      HTH。

      【讨论】:

      • 谢谢...但我还是不明白 err 对象...查看 OQ 的更新
      • 奇怪。您使用的是什么版本的节点?我只是试图复制,请求给了我一个错误,其中有键 [code, errno, syscall, address, port]
      • 相当老了。当前版本是 4.0.0。我知道这不能回答您的问题,但我想知道为什么您会得到不同的输出。还在研究中
      • 好的,我明白了。对象类型是错误developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
      • 我可以在调试器中看到它,因为我有更新版本的节点。它不可见,因为它不可迭代。方括号中的文本是错误对象的属性数组子元素的第二个值。
      猜你喜欢
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2018-01-19
      • 2020-05-09
      • 1970-01-01
      • 2020-07-26
      • 2020-05-23
      相关资源
      最近更新 更多