Почему промежуточное ПО обработки ошибок является предпочтительным вариантом в экспресс-приложенииJavascript

Форум по Javascript
Ответить
Anonymous
 Почему промежуточное ПО обработки ошибок является предпочтительным вариантом в экспресс-приложении

Сообщение Anonymous »

В экспресс-приложении я использую шаблон MVC. В моем контроллере я вызываю точку входа метода в свою модель (которая в данном случае представляет собой небольшой сервисный класс, который получает DAO), которая также включает свой собственный блок try catch для учета либо ошибки подключения к базе данных, либо ошибки, в которой нет пользователя. находится в базе данных. Если перед этим процессом в промежуточном программном обеспечении предыдущего запуска возникают какие-либо ошибки проверки, я устраняю ошибку внутри контроллера. Сам контроллер представляет собой специальную функцию промежуточного программного обеспечения, которая обрабатывает бизнес-логику, когда пользователь-администратор хочет войти в систему.
exports.login = async (req, res, next) => {
try {
const errors = validationResult(req);
if (!errors.isEmpty()) {
const error = new ValidationError(422,'validation error', errors);
throw error;
}
const loginService = new LoginService(AdminDAO, req.body.username, req.body.password);
const userId = await loginService.authenticateUser();
req.session.adminUserId = userId; // this is only run if an error is not thrown either in my service class or DAO when calling this method
res.redirect("/admin");
} catch (e) {
return next(e);
}
};

Промежуточное программное обеспечение обработки ошибок проверяет тип ошибки и на основе ошибки отправляет ответ обратно клиенту. Я делаю это, либо запуская оператор if else для проверки типа ошибки, либо сохраняя объекты ошибок в массиве и извлекая тот, который соответствует типу, или тот, который соответствует экземпляру класса Error, придерживаясь принципа открытости/закрытости, используя стратегию введите шаблон с полиморфным методом для возврата ответа.
Однако я не вижу в этом преимуществ. Почему бы мне просто не создать полиморфный метод с именем что-то вроде handleError(res) в каждом классе Error, который обрабатывает ошибку и отправляет ответ, а затем вызвать его в моем блоке catch вместо передачи объекта в next(), чтобы он затем имел обработать ответ, выполнив то же самое, что я мог бы сделать в классе Error, прежде чем вызывать следующий вызов? Вот так:
exports.login = async (req, res, next) => {
try {
const errors = validationResult(req);
if (!errors.isEmpty()) {
const error = new ValidationError(422,'validation error', errors);
throw error;
}
const loginService = new LoginService(AdminDAO, req.body.username, req.body.password);
const userId = await loginService.authenticateUser();
req.session.adminUserId = userId; // this is only run if an error is not thrown either in my service class or DAO when calling this method
res.redirect("/admin");
} catch (e) {
return e.handleError(res) // this method returns the error to the client
}
};


Подробнее здесь: https://stackoverflow.com/questions/793 ... xpress-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»