我的删除路由具有2个中间件功能Authcontroller.protect和authcontroller.restrictTo(“ admin,” lead-guide“)
router
.delete(
authController.protect,
authController.restrictTo("admin", "lead-guide"),
tourController.deleteTour
);
在strictTo内,我进行检查以查看用户是否具有执行该任务的适当“角色”,如果他们没有,则认为Express会发送403。我看到Express从未实际发送响应。它输入if语句(我看到控制台已成功打印出fialure),然后跳过了发送响应。
exports.restrictTo = (...roles) => {
return (req, res, next) => {
console.log(req.user.role);
if (!roles.includes(req.user.role)) {
console.log("failure");
return res.status(403).json({
status: fail,
message: "you do not have permission to perform this action"
});
console.log(req, res);
}
next();
};
};
答案 0 :(得分:0)
在内部函数中放入try/catch
,看看是否有异常被抛出。
从代码的角度来看,如果未定义fail
变量(未显示其定义),则将引发异常并阻止执行res.json()
。 / p>