node.js中的错误类
显然,节点文档的控制台核心模块()中存在以下代码:node.js中的错误类,node.js,Node.js,显然,节点文档的控制台核心模块()中存在以下代码: console.error(new Error('Whoops, something bad happened')); // Prints: [Error: Whoops, something bad happened], to stderr 但是,当我运行test.js时,下面会显示哪些代码 var err = new Error('a'); console.error(err); 终端按如下方式打印消息: 错误:a 反对。(/Use
console.error(new Error('Whoops, something bad happened'));
// Prints: [Error: Whoops, something bad happened], to stderr
但是,当我运行test.js时,下面会显示哪些代码
var err = new Error('a');
console.error(err);
终端按如下方式打印消息:
错误:a
反对。(/Users/suoyong/Express)/连接数据库/错误:js:1:73)
在模块处编译(Module.js:556:32)
在Object.Module._extensions..js(Module.js:565:10)
在Module.load(Module.js:473:32)
在TryModule加载时(module.js:432:12)
在Function.Module.\u加载(Module.js:424:3)
位于Module.runMain(Module.js:590:10)
运行时(bootstrap_node.js:394:7)
启动时(bootstrap_node.js:149:9)
在bootstrap_node.js:509:3
如您所见,我的代码与节点文档相同,但结果不同。
请帮我回答这个小问题
这不是字面意义上的解释。无论如何,在最新的LTS和稳定版本中都没有。打印这样的错误实际上会打印错误对象的文本表示,在文档中称为[error:Whoops,糟糕的事情发生了]
。以下文件进一步阐明了实际预期行为:
如果在第一个字符串中找不到格式化元素(例如%d),则对每个参数调用util.inspect()
,并将结果字符串值串联起来
在util.inspect()
一侧,此方法“返回主要用于调试的对象的字符串表示形式”。对于类型为Error
的对象,这将生成一个包含错误消息和堆栈跟踪的字符串
> const txt = util.inspect(new Error("I'm on SO"))
undefined
> txt
'Error: I\'m on SO\n at repl:1:26\n at sigintHandlersWrap (vm.js:22:35)\n at sigintHandlersWrap (vm.js:96:12)\n at ContextifyScript.Script.runInThisContext (vm.js:21:12)\n at REPLServer.defaultEval (repl.js:313:29)\n at bound (domain.js:280:14)\n at REPLServer.runBound [as eval] (domain.js:293:12)\n at REPLServer.<anonymous> (repl.js:513:10)\n at emitOne (events.js:101:20)\n at REPLServer.emit (events.js:188:7)'
> console.log(txt)
Error: I'm on SO
at repl:1:26
at sigintHandlersWrap (vm.js:22:35)
at sigintHandlersWrap (vm.js:96:12)
at ContextifyScript.Script.runInThisContext (vm.js:21:12)
at REPLServer.defaultEval (repl.js:313:29)
at bound (domain.js:280:14)
at REPLServer.runBound [as eval] (domain.js:293:12)
at REPLServer.<anonymous> (repl.js:513:10)
at emitOne (events.js:101:20)
at REPLServer.emit (events.js:188:7)
>const txt=util.inspect(新错误(“我是如此”))
未定义
>文本
'错误:我是如此\n在repl:1:26\n在sigintHandlersWrap(vm.js:22:35)\n在sigintHandlersWrap(vm.js:96:12)\n在ContextifyScript.Script.runinthiscoxt(vm.js:21:12)\n在REPLServer.defaultEval(repl.js:313:29)\n在bound(domain.js:280:14)\n在REPLServer.runBound[as eval](domain.js:293:12)\n在REPLServer。(repl.js:513:10)\n位于emitOne(events.js:101:20)\n位于REPLServer.emit(events.js:188:7)'
>console.log(txt)
错误:我是这样的
回复:1:26
在sigintHandlersWrap(vm.js:22:35)
在sigintHandlersWrap(vm.js:96:12)
在ContextifyScript.Script.runInThisContext(vm.js:21:12)
在REPLServer.defaultEval(repl.js:313:29)
绑定时(domain.js:280:14)
在REPLServer.runBound[as eval](domain.js:293:12)
在服务器上。(回复js:513:10)
在emitOne(events.js:101:20)
在REPLServer.emit上(events.js:188:7)
我猜这在节点v4和节点v6之间发生了变化
对于v4,输出如文件所示;对于v6,输出中包含堆栈跟踪,就像您看到的那样
您可以通过使用
console.error(err.toString())
来解决这个问题,这两个版本都会输出error:a
(因此减去任何括号,但如果您确实需要这些括号,当然可以添加它们)。您在哪里看到的?我在官方文档中找不到您声称的内容。@E_net4您可以Ctr+F find请在您的问题中包含该链接。中的文档显示了相同的内容。现在,很难猜测这是文档中没有更新的旧行为,还是只是解释错误对象将被打印到stderr的一种手段。@Sooyong没问题,你的问题很合理(也别忘了接受答案)。我想知道No.JS基金会的开发者是否知道这一点。
> const txt = util.inspect(new Error("I'm on SO"))
undefined
> txt
'Error: I\'m on SO\n at repl:1:26\n at sigintHandlersWrap (vm.js:22:35)\n at sigintHandlersWrap (vm.js:96:12)\n at ContextifyScript.Script.runInThisContext (vm.js:21:12)\n at REPLServer.defaultEval (repl.js:313:29)\n at bound (domain.js:280:14)\n at REPLServer.runBound [as eval] (domain.js:293:12)\n at REPLServer.<anonymous> (repl.js:513:10)\n at emitOne (events.js:101:20)\n at REPLServer.emit (events.js:188:7)'
> console.log(txt)
Error: I'm on SO
at repl:1:26
at sigintHandlersWrap (vm.js:22:35)
at sigintHandlersWrap (vm.js:96:12)
at ContextifyScript.Script.runInThisContext (vm.js:21:12)
at REPLServer.defaultEval (repl.js:313:29)
at bound (domain.js:280:14)
at REPLServer.runBound [as eval] (domain.js:293:12)
at REPLServer.<anonymous> (repl.js:513:10)
at emitOne (events.js:101:20)
at REPLServer.emit (events.js:188:7)