2016-10-13 2 views
2

Очевидно, что в консоли основных модулей (https://nodejs.org/dist/latest-v4.x/docs/api/console.html) документации узла существует код ниже:Класс ошибки в 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); 

терминал выводит сообщение типа:

Error: a at Object. (/Users/suoyong/Express/连接数据库/error.js:1:73) at Module._compile (module.js:556:32) at Object.Module._extensions..js (module.js:565:10) at Module.load (module.js:473:32) at tryModuleLoad (module.js:432:12) at Function.Module._load (module.js:424:3) at Module.runMain (module.js:590:10) at run (bootstrap_node.js:394:7) at startup (bootstrap_node.js:149:9) at bootstrap_node.js:509:3

Как вы можете видеть, мой код же с узлом doc, и все же результат нет. Пожалуйста, помогите мне с крошечным вопросом.,

+0

Где вы это видели? Я не могу найти то, что вы утверждаете в официальной документации. –

+0

@ E_net4 https://nodejs.org/dist/latest-v4.x/docs/api/console.html, что вы можете Ctr + F найти – suoyong

+0

Пожалуйста, включите эту ссылку в свой вопрос. –

ответ

1
console.error(new Error('Whoops, something bad happened')); 
// Prints: [Error: Whoops, something bad happened], to stderr 

Это не следует понимать в буквальном смысле. В любом случае, не в последних версиях LTS и стабильных версий. Печать такой ошибки будет фактически напечатать текстовое представление объекта ошибки, которое в документации было указано как [Error: Whoops, something bad happened]. Фактическая намеченная поведение дополнительно уточнить в документации Console.error():

If formatting elements (e.g. %d) are not found in the first string then util.inspect() is called on each argument and the resulting string values are concatenated.

На стороне 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) 
+0

извините за поздний ответ. Большое спасибо. – suoyong

+0

@suoyong Нет проблем, ваш вопрос был вполне разумным (также не забудьте принять ответ). Интересно, знают ли разработчики в Node.js об этом. –

0

Я думаю, что это изменилось между Node v4 и Node v6.

С v4 выход такой же документированный; с v6 в вывод включена трассировка стека, как и то, что вы видите.

Вы можете обойти его, используя console.error(err.toString()), который для обеих версий будет выводить Error: a (так что минус любые скобки, но если вы действительно хотите те, которые вы можете добавить, конечно).

+0

Документация в [v6.8.0] (https://nodejs.org/api/console.html#console_console) показывает то же самое. Теперь трудно догадаться, было ли это старое поведение, не обновленное в документации, или просто объяснение того, что объект ошибки будет напечатан на stderr. –

+0

Я предполагаю, что документация не была обновлена. – robertklep

Смежные вопросы