kin*_*der 5 error-handling repository-pattern node.js express
我正在 NodeJS、expressJS 中开发 API,并且遵循存储库模式。所以有控制器、服务和存储库。现在,根据存储库模式的规则,我的控制器、服务和存储库如下所示。这些仅用于演示目的,实际代码与此不同。
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 });
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
用户存储库.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 } }
}
}
Run Code Online (Sandbox Code Playgroud)
现在我面临的问题是我正在重复代码并从 repo => services => controller 返回错误。我想要的是,从任何地方抛出错误,无论是存储库还是服务。根据express文档,我们可以在app.js中使用全局中间件并将错误传递给下一个函数next(err),例如,express将自动处理该问题。
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
Run Code Online (Sandbox Code Playgroud)
但由于我们的服务和存储库中不提供 next() 函数,我该如何处理和抛出错误?在上面的示例中,我只是将两个错误从服务传递到控制器,但在实际情况下,可能会有很多错误,所以我将重复很多我不想做的代码
| 归档时间: |
|
| 查看次数: |
1462 次 |
| 最近记录: |