我是Express和Node的新手,在使用Advanced REST Client在我的应用中测试受保护的REST端点时,数据会按预期从端点返回到客户端,但控制台会记录
"Error: Can't set headers after they are sent"
停止服务器。在SO上搜索,这似乎在发送多个响应时发生,但我在我的代码中没有看到:
router.get('/books', userAuthenticated, function (req, res, next) {
Book.find({}, function(err, docs){
if(err) {
res.send(err)
} else {
res.send(docs);
// next();
// return;
}
})
});
在向客户端发送请求/响应时是否会出现此错误,或者在处理服务器上的错误时是否遗漏了某些内容?
答案 0 :(得分:0)
Express是一个node.js服务器,它具有一个名为“中间件”的概念,其中多层代码有机会对请求进行操作。
在这种情况下,您不仅需要检查您的功能是否未发送两次响应,而且还必须检查其他中间件是否也没有发回响应。
在您的情况下,代码表示在此函数之前调用名为“userAuthenticated”的中间件。您应该检查该中间件是否已经发送了响应。
答案 1 :(得分:0)
I don't think the problem was in the middleware. It looks like I was calling done() twice in passport deserialize. I commented out the first instance and the problem disappeared in all my routes. Although, I am not sure if I should comment out the first or second instance but I'll work on that next.
passport.deserializeUser(function(obj, done) {
console.log(obj);
Account.findById(obj, function(err, user) {
console.log(user);
//done(err, user);
});
return done(null, obj);
});