我正在用 NodeJS、expressJS 开发一个 API,我正在遵循存储库模式。所以有 Controller 、服务和存储库。 现在,按照存储库模式的规则,我的 Controller 、服务和存储库是这样的。这些只是为了演示目的,实际代码与此不同。
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 } }
}
}
现在我面临的问题是我重复代码并从 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!')
})
但由于 next() 函数在我们的服务和存储库中不可用,我该如何处理和抛出错误? 在上面的例子中,我只是将两个错误从服务传递给 Controller ,但在实际情况下,可能会有很多,所以我将重复很多我不想做的代码
最佳答案
在 Controller 中,将服务调用包围在 try-catch block 中并将错误传递给下一个函数。
然后,您可以在服务和存储库函数中抛出错误,并在 errorHandler 中间件中进行管理。
关于node.js - 如何按照存储库模式从 nodeJS 应用程序中的服务和存储库中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63239881/