JavaScript Node.js如何在try catch中获取行号?

37

我在一个node.js脚本中使用try catch:

try {} catch (err) {console.log(err)}

我得到了这样的输出:

{ 
  stack: [Getter/Setter],
  arguments: [ 'undefined' ],
  type: 'called_non_callable',
  message: [Getter/Setter]
}

有没有简单的方法使这更具信息性?包括行号、函数名等?

1个回答

80

[Getter/Setter]成员指示错误对象上可用的进一步信息。您可以使用一个小帮助函数(非常简单的实现,进一步完善由您自行决定)轻松地转储这些getter/setter的内容。

function dumpError(err) {
  if (typeof err === 'object') {
    if (err.message) {
      console.log('\nMessage: ' + err.message)
    }
    if (err.stack) {
      console.log('\nStacktrace:')
      console.log('====================')
      console.log(err.stack);
    }
  } else {
    console.log('dumpError :: argument is not an object');
  }
}

try {
  not_defined.function_call();
} catch(err) {
  dumpError(err);
}

你还可以扩展Object.prototype以改善可访问性(这样你就可以使用err.dumpError()),不过扩展Object.prototype存在覆盖现有功能的风险。


现实生活中的改变者,谢谢。 - Kaan Soral
如何获取更深层次的 err.stack? - sparkle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接