Документы NodeJS не сочетаются с лучшими практиками: операционная обработка ошибок - PullRequest
0 голосов
/ 15 декабря 2018

Существует множество вопросов о переполнении стека относительно лучших практик NodeJS, когда речь идет о лучших методах обработки ошибок, особенно в отношении операционных ошибок.После целого утра чтения статей и просмотра разговоров о передовых практиках я запутался как никогда.

Вот фрагмент из логики для регистрации нового пользователя в моем сервисе:

const registerUser = new Promise((resolve, reject) => {
  bcrypt.genSalt(10, (err, salt) => {
      if (err) {
        reject(new Error('An error occurred while generating password salt.'));
      } else {
        bcrypt.hash(user.password, salt, (err, hash) => {
          if (err) {
            reject(new Error('An error occurred while hashing password.'));
          } else {
            user.password = hash;
            user.save().then((err, user) => {
              if(err) {
                reject(new Error('An error occurred while saving the user.'));
              }
              resolve(user);
            });
          }
        });
      }
  });
}

Я использую обратные вызовы, где первый аргумент является объектом Error.Это согласуется с документацией NodeJS по обратным вызовам при первой ошибке: https://nodejs.org/api/errors.html#errors_error_first_callbacks.

Но сообщество, похоже, считает, что обратные вызовы отстой и приводят к храмам гибели, как в коде выше.Например, на GitHub есть репозиторий с лучшими практиками NodeJS с 19 120 звездами.На главной странице авторы утверждают:

Стиль обратного вызова Node.js, функция (err, response), является многообещающим способом неосуществимого кода из-за сочетания обработки ошибок со случайным кодом,чрезмерное вложение и неуклюжие шаблоны кодирования

Источник: https://github.com/i0natan/nodebestpractices#2-error-handling-practices

Что дает?Как лучше всего обрабатывать ежедневные ошибки в работе приложения NodeJS?Продвигают ли документы NodeJS анти-паттерны?Это кажется простой вещью, которую следует стандартизировать, но после нескольких часов поиска я не могу найти ни единого источника истины или общепринятого стандарта.

...