Closed sadr0b0t closed 7 years ago
Блин, ну и фигня
здесь Тонкости nodejs. Часть II: Работа c ошибками https://habrahabr.ru/post/244523/
рекомендуют работать с полями message, name и code. Есть рекомендации по значениям, но не дают примера, как их лучше устанавливать.
оттуда же ссылка на спеки, вот глава про Error
15.11 Error Objects http://www.ecma-international.org/ecma-262/5.1/#sec-15.11
там есть name и message
15.11.4.2 Error.prototype.name The initial value of Error.prototype.name is "Error". 15.11.4.3 Error.prototype.message The initial value of Error.prototype.message is the empty String.
В Node ничего про поле name нет Node.js v7.4.0 Documentation: Errors https://nodejs.org/api/errors.html
зато есть поле code у SystemError https://nodejs.org/api/errors.html#errors_error_code
очевидно, пользовательское, не общее для всех вообще ошибок Error
здесь пишут про поля name и message http://javascript.ru/error
еще неплохая обзорная статья Обработка ошибок в Node.js https://habrahabr.ru/post/222761/
Ошибка обязательно должна содержать корректные поля: name: используется обработчиками для дифференциации ошибок по типу. message: текст описывающий возникшую проблему. Текст должен быть коротким, но достаточно ёмким, что бы можно было понять суть проблемы. stack: никогда не изменяйте объект стэка вызовов. V8 производит построение этого объекта только тогда, когда к нему производится обращение и процесс построения достаточно ресурсоёмкий, обращение к этому полю существенно снижает производительность программы.
И лучшая статья - документация у Мозилы https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Error
есть общие рекомендации и пример.
Пример: пользовательские типы ошибок Вы можете захотеть определить свои собственные типы ошибок, унаследованные от Error, что бы иметь возможноть писать throw new MyError() и использовать instanceof MyError для проверки вида ошибки в обработчике исключений. Ниже продемонстрирован общий подход к выполнению этой задачи.
// Создаём новый объект, затем через прототип делаем его наследником конструктора Error.
function MyError(message) {
this.name = 'MyError';
this.message = message || 'Сообщение по умолчанию';
this.stack = (new Error()).stack;
}
MyError.prototype = Object.create(Error.prototype);
MyError.prototype.constructor = MyError;
try {
throw new MyError();
} catch (e) {
console.log(e.name); // 'MyError'
console.log(e.message); // 'Сообщение по умолчанию'
}
try {
throw new MyError('пользовательское сообщение');
} catch (e) {
console.log(e.name); // 'MyError'
console.log(e.message); // 'пользовательское сообщение'
}
блин, не тот проект https://github.com/1i7/babbler-js/issues/5
Сейчас ошибки из babbler в onResult приходят стандартно в поле err
сообщения для возможных ошибок перечислены в константах https://github.com/1i7/babbler-js/blob/master/src/babbler.js#L70
однако, по текстовым сообщения определять, что это именно за ошибка, как-то не технологично.
Как выяснилось, так считаю не я один. В самом JavaScript этому моменту не уделено достаточно внимания, поэтому придумывают специальные техники: добавляют имя и код ошибки.
Тонкости nodejs. Часть II: Работа c ошибками https://habrahabr.ru/post/244523/