express中间件未发送响应
我有一个删除路由,它有两个中间件函数Authcontroller.protect和Authcontroller.restrictTo(“admin,“lead guide”) 在restrictTo内,我会检查用户是否有适当的“角色”来执行该任务,如果他们没有,express应该不会发送403。我发现express从未实际发送响应。它会输入if语句(我看到控制台成功打印fialure),然后跳过发送响应express中间件未发送响应,express,Express,我有一个删除路由,它有两个中间件函数Authcontroller.protect和Authcontroller.restrictTo(“admin,“lead guide”) 在restrictTo内,我会检查用户是否有适当的“角色”来执行该任务,如果他们没有,express应该不会发送403。我发现express从未实际发送响应。它会输入if语句(我看到控制台成功打印fialure),然后跳过发送响应 exports.restrictTo = (...roles) => { retu
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();
};
};
在内部函数中放置一个
try/catch
,看看是否抛出异常
通过查看代码,如果未定义
fail
变量(您没有显示其定义),则会引发异常并保留res.json()
执行。在内部函数中放置一个try/catch
,查看是否引发异常。例如,什么是fail
?它是在此上下文中定义的吗?在内部函数中放置一个断点并逐步执行,查看到底发生了什么。这是基本调试。如果您了解如何做到这一点,它将为您节省大量时间解决未来的问题。哦,关于try/catch的调用很好。它将我指向失败值,它应该是一个字符串。这解决了问题。感谢您的帮助
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();
};
};