Я разрабатываю API в NodeJS, expressJS и следую шаблону репозитория. Итак, есть контроллеры, сервисы и репозитории. Теперь, по правилам шаблона репозитория, Мои контроллеры, сервисы и репозитории выглядят так. Это просто для демонстрации, фактический код отличается от этого.
authController. js
export const loginController = async (req, res, next) => {
const user = await authServices.login(req.body);
if (user.error) {
res.error(user.errorBody)
}
else {
return res.success({ code: 200, message: "Logged in succesfully", data: user });
}
}
authServices. js
export const loginServcies = async (loginDetails) => {
const user = await userRepository.login(loginDetails);
if (!user) {
return {
error: true, errorBody: {
code: 422, message: 'User doesnot exist', errors: null
}
}
}
else if (!user.active) {
return { error: true, errorBody: { code: 403, message: 'User not active', errors: null } };
}
else if (user) {
return user;
}
}
userRepository. js
export const userRepository = async (loginDetails) => {
let user;
try {
user = await user.find({ where: { user: loginDetails.user } })
}
catch (error) {
return { error: true, errorBody: { code: 500 } }
}
}
Теперь проблема, с которой я столкнулся, заключается в том, что я повторяю код и возвращаю ошибку из репо => услуги => контроллер. Я хочу выбросить ошибку откуда угодно, будь то репозиторий или службы. Согласно документации express, мы можем использовать глобальное промежуточное ПО в нашем приложении. js и передать ошибку следующей функции, например next(err)
, и express автоматически обработает это.
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
, но поскольку функция next () недоступна в наших сервисах и репозиториях, как я могу обрабатывать и выдавать ошибки? В приведенном выше примере я только что передал две ошибки из служб в контроллеры, но на практике их может быть много, поэтому я повторю много кода, который я не хочу делать