Javascript 错误:Can';在页面刷新时发送标题后,不设置标题
当我试图刷新一个特定的页面时,我得到了一个错误:发送后无法设置标题。现在,当我真的点击一个链接到那个页面时,它并没有发生。我已经彻底检查了请求期间的事件链。中间件和请求似乎不会导致res.end()被调用两次 对每个请求调用的中间件:Javascript 错误:Can';在页面刷新时发送标题后,不设置标题,javascript,node.js,express,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']; c
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);
});
})
我在前端使用angular,并使用拦截器将用户令牌写入x-access-token。因此,当发生此错误时,中间件无法获取令牌,导致该页面出现403错误。几天来我一直在想这个问题,但我不知所措。我想这是一件非常愚蠢的事情
} else {
res.status(403).send({
success: false,
message: 'No token provided'
});
next();
}
您的
else
块正在发送响应,同时调用next()
,这意味着它将发送错误,并尝试运行路由并发送响应。由于两者都试图发送响应,您将得到一个错误。啊,这似乎解决了错误,但没有解决令牌问题。令牌问题暴露了这个问题,这是一个好问题。谢谢你的回复!