Существует множество вопросов о переполнении стека относительно лучших практик 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 анти-паттерны?Это кажется простой вещью, которую следует стандартизировать, но после нескольких часов поиска я не могу найти ни единого источника истины или общепринятого стандарта.