2015-09-29 7 views
3

Я очень озадачен Node.js Error объекта, при входе в консоль ...
В качестве примера, у меня есть этот код:Node.js: как проверить ошибки?

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

Иногда ошибки из за ошибки в ECONNRESET ... Так это так хорошо.
The (console.log() или) Формат console.error() это:

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

Я не могу понять формат распечатанный: почему «Ошибка: разъем отбой» входит в квадратные скобки? Это объект? Один для всех: как я могу проверить объект ошибки, чтобы я мог видеть все индивидуальные свойства?

UPDATE: После @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 объекта: без ключей, но имеет содержание ... :-(

ответ

2

Тип ошибки, возвращаемый запроса является объектом ошибка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error

Одним из его свойств является массив, называемый свойствами, а второй элемент содержит текст, который вы видите в квадратных скобках. Javascript позволяет задать различные степени и качество видимости некоторые пользовательские объекты, такие как ошибки имеют эти свойства устанавливают: 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. Узел сломается на первой линии так типа «с», чтобы продолжить.
  2. Когда он останавливается на указанной выше линии, тип repl(означает чтение, Eval, печать, петля) чтобы проверить переменные например, тип

    Object.keys(err) для проверки свойств ошибки (предположим, что это объект).

Fyi, для графической альтернативы можно попробовать узел-инспектор который можно установить с:

npm install -g node-inspector 

затем запустить с

node-debug server.js 

Ваш код будет открыт в Chrome и предоставить вам те же инструменты, которые доступны во время отладки интерфейса.

HTH.

+0

Спасибо ... Но я до сих пор не понимаю, объект заблуждается ... Смотрите обновление OQ – MarcoS

+0

Странно. Какую версию узла вы используете? Я просто попытался воспроизвести и запросить дал мне ошибку, которая имеет ключи [код, errno, syscall, адрес, порт] – chriskelly

+0

v0.10.40 ...... – MarcoS

1

Также вы можете использовать:

console.dir(err); 

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

UPDATE:

Это документ об объекте Error:

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

В квадратных скобках Ошибка показывает тип и сообщение. Тип - это класс ошибки, а сообщение - параметр, переданный конструктору ошибок.

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

Дает: [TypeError: Bla Bla Bla]

+0

Спасибо, хорошая информация. Хотя в этой ситуации я получаю тот же результат ... – MarcoS

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