Как вывести ошибку из служб и репозиториев в приложении nodeJS по шаблону репозитория - PullRequest
2 голосов
/ 04 августа 2020

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

1 Ответ

0 голосов
/ 04 августа 2020

В контроллере объемный вызов службы в блоке try-catch и передача ошибки следующей функции.

Затем вы можете выдавать ошибки в функциях службы и репозитория и управлять ими в промежуточном программном обеспечении errorHandler.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...