javascript node.js получаем номер строки в try catch?

#javascript #node.js #error-handling #try-catch

#javascript #node.js #обработка ошибок #попробуйте-catch

Вопрос:

Я использую try catch для node.js скрипт:

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

Я получаю вывод, подобный этому:

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

Есть ли простой способ сделать это более информативным? Включить номера строк и имена функций и тому подобное?

Ответ №1:

Эти [Getter/Setter] члены указывают на дополнительную информацию, доступную для объекта error. Вы можете легко выгрузить содержимое этих геттеров / установщиков, используя небольшую вспомогательную функцию (очень тривиальная реализация, дальнейшая доработка зависит от вас)

 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 сопряжено с риском перезаписи существующей функциональности.

Комментарии:

1. Реальная жизнь меняется, тай

2. Как получить более глубокий уровень err.stack?