"Error: Can't set headers after they are sent" in Express app with Node
"Error: Can't set headers after they are sent" in Express app with Node
我是 Express 和 Node 的新手,当使用高级 REST 客户端在我的应用程序中测试受保护的 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;
}
})
});
发送 request/response to/from 客户端时是否会出现此错误,或者我在处理服务器错误时遗漏了什么?
Express 是一个 node.js 服务器,它具有一个称为 "middleware" 的概念,其中多层代码有机会对请求进行操作。
在那种情况下,您不仅需要检查您的函数是否没有发回响应两次,而且您还必须检查其他中间件是否也没有发回响应。
在您的例子中,代码表明调用 "userAuthenticated" 的中间件在此函数之前被调用。您应该检查该中间件是否已经在发送响应。
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);
});
我是 Express 和 Node 的新手,当使用高级 REST 客户端在我的应用程序中测试受保护的 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;
}
})
});
发送 request/response to/from 客户端时是否会出现此错误,或者我在处理服务器错误时遗漏了什么?
Express 是一个 node.js 服务器,它具有一个称为 "middleware" 的概念,其中多层代码有机会对请求进行操作。
在那种情况下,您不仅需要检查您的函数是否没有发回响应两次,而且您还必须检查其他中间件是否也没有发回响应。
在您的例子中,代码表明调用 "userAuthenticated" 的中间件在此函数之前被调用。您应该检查该中间件是否已经在发送响应。
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);
});