express中间件未发送响应

express中间件未发送响应,express,Express,我有一个删除路由,它有两个中间件函数Authcontroller.protect和Authcontroller.restrictTo(“admin,“lead guide”) 在restrictTo内,我会检查用户是否有适当的“角色”来执行该任务,如果他们没有,express应该不会发送403。我发现express从未实际发送响应。它会输入if语句(我看到控制台成功打印fialure),然后跳过发送响应 exports.restrictTo = (...roles) => { retu

我有一个删除路由,它有两个中间件函数Authcontroller.protect和Authcontroller.restrictTo(“admin,“lead guide”)

在restrictTo内,我会检查用户是否有适当的“角色”来执行该任务,如果他们没有,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();
  };
};

在内部函数中放置一个
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();
  };
};