"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);
});