В экспресс-приложении я использую шаблон 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
Почему промежуточное ПО обработки ошибок является предпочтительным вариантом в экспресс-приложении ⇐ Javascript
Форум по Javascript
1736719699
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
}
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79350800/why-is-the-error-handling-middleware-the-preferred-option-in-an-express-app[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия