表达中间件未发送响应

时间:2020-03-08 02:56:27

标签: express

我的删除路由具有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();
  };
};

1 个答案:

答案 0 :(得分:0)

在内部函数中放入try/catch,看看是否有异常被抛出。

从代码的角度来看,如果未定义fail变量(未显示其定义),则将引发异常并阻止执行res.json()。 / p>