错误:在页面刷新后发送标题后无法设置标题

时间:2015-03-20 15:43:23

标签: javascript node.js express

当我尝试刷新特定页面时,我收到错误:发送后无法设置标题。现在,当我实际点击该页面的链接时,它不会发生。我在请求期间彻底查看了事件链。中间件和请求似乎没有导致res.end()被调用两次。

每次请求都会调用中间件:

projectRouter.use(function(req, res, next) {
  var token = req.body.token || req.params.token || req.headers['x-access-token'];

  console.log(token);

  if (token) {
    jwt.verify(token, superSecret, function(err, decoded) {
      if (err) {
        res.status(403).send({
          success: false,
          message: 'Failed to authenticate token.'
        });
      } else {
        req.decoded = decoded;

        next();
      }
    });
  } else {
    res.status(403).send({
      success: false,
      message: 'No token provided'
    });
    next();
  }
});

请求错误发生在:

projectRouter.route('/projects/:proj_id')

.get(function(req, res) {
  Project.findById(req.params.proj_id, function(err, project) {
    if (err) { res.send(err); return; }

    res.json(project);
  });
})

我在前端使用角度,并使用拦截器将用户令牌写入x-access-token。因此,当发生此错误时,中间件无法获取令牌,从而导致该页面上的403。我一直在努力解决这个问题几天而且不知所措。我想这件事真的很蠢。

1 个答案:

答案 0 :(得分:0)

} else {
  res.status(403).send({
    success: false,
    message: 'No token provided'
  });
  next();
}

您的else区块正在发送回复并且还在呼叫next(),这意味着它会发送错误并尝试运行您的路线并发送回复。由于两者都试图发送响应,您将收到错误。