因此,我正在使用Express在Node中使用REST API,并且在如何构建其中的某些方面遇到了一些问题。我正在尝试将业务逻辑分为一个服务层,这是我收集到的标准的服务,但这使我不确定如何处理权限。
例如,假设我有一个用户拥有汽车的系统。如果我只是处理控制器中的所有内容,我会做类似的事情:
// PATCH /car/:id
export async function updateCar(req, res) {
const car = await CarModel.findOne(req.params.id);
if (req.session.user.id !== car.owner.id) {
return res.status(403).send()
}
await CarModel.update(req.params.id, req.body);
res.status(200).send();
}
但是现在让我说我想将所有这些都移到服务对象上。做这样的事有意义吗:
// PATCH /car/:id
export async function updateCar(req, res) {
try {
await CarService.update(req.params.id, req.body, req.session.user);
} catch (err) {
if (err instanceof PermissionError) {
return res.status(403).send();
}
}
res.status(200).send();
}
还是在控制器中处理权限检查然后调用服务更有意义?这样可以解决我不需要检查权限的情况(例如,当后台进程需要进行更新或其他操作时)的问题,但是这似乎也将大量不必要的代码放入了不执行此操作的控制器中不用担心。
有什么建议吗?我可能是想得太多了吗?