Страницы

суббота, 3 октября 2015 г.

Node.js error custom property

Как создать ошибку в JavaScript - разумеется с помощью конструктора Error. В коде веб-сервисов на Node.js как правило используется функция-обработчик в которую прилетают все ошибки, где и происходит "магия" логгирования и прочая кастомная логика обработки ошибок. Сегодня расскажу как присвоить ошибке статус или иное кастомное свойство с помощью функции-фабрики и, самое главное, удалить упоминание о месте рождения ошибки из стека.


К примеру модуль создания ошибок по имени error.js выглядит так:
module.exports = function error(msg, status) {
  var err = new Error(msg);
  err.status = status || 500;
  return err;
};

... и в процессе использования его в коде приложения:
var error = require('./error');
(function myFunction() {
  throw error('myError');
})();

... мы получаем запись о том, что ошибка появилась в модуле error.js, в стеке:

... а лечится это следующим образом:
module.exports = function error(msg, status) {
  var err = new Error(msg);
  err.status = status || 500;
  Error.captureStackTrace(err, error);
  return err;
};

... легким движением руки, брюки превращаются...:

Вот как-то так.