Javascript 当I';我没有设置任何

Javascript 当I';我没有设置任何,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有一个中间件功能来检查,以确保用户在每个页面加载时都像这样登录 app.use(function(req, res, next) { if (req.cookies.hasOwnProperty('rememberToken')) { app.get('db').Users.find({'rememberToken': req.cookies.rememberToken}, function(errFind, resultsFind) { if (errFind) {

我有一个中间件功能来检查,以确保用户在每个页面加载时都像这样登录

app.use(function(req, res, next) {
  if (req.cookies.hasOwnProperty('rememberToken')) {
    app.get('db').Users.find({'rememberToken': req.cookies.rememberToken}, function(errFind, resultsFind) {
      if (errFind) {
        return next();
      } else if (resultsFind.length === 0) {
        return next();
      }
      app.locals.isLoggedIn = true;
      app.locals.username   = resultsFind[0].user_username;
      return next();
    });
  } else if (req.session.hasOwnProperty('isLoggedIn')) {
      app.locals.isLoggedIn = true;
      app.locals.username   = req.session.username;
      console.log(app.locals);
      return next();
  }
  return next();
});
唯一的问题是,当它执行cookie身份验证时,我得到以下错误:

GET / 500 3ms
Error: Can't set headers after they are sent.
我已经在错误来自的函数中缩小了范围

app.get('db').Users.find({'rememberToken': req.cookies.rememberToken}, function(errFind, resultsFind) {

});

如果我删除这个函数,错误就会消失,我不知道为什么使用这个函数会导致这个错误,有人能帮我吗。在
app.js

中我的
路由
之前有这一行中间件,这是由于node.js的异步性质。在函数的最后一行,有一个
return next()
,它将请求传递给下一个中间件。这意味着标头已发送

当您包含该函数时,将调用数据库,但服务器会继续,以便您的服务器可以在等待数据库返回用户时处理其他请求。当数据库返回数据时,它会进入回调函数,尝试执行
returnnext()
。但是在您的情况下,已经调用了
next
,这就是为什么会出现错误


要解决这个问题,请删除最后一行的
return next()

你真是个天才!谢谢你,我不敢相信我看多了这个,我在结尾加了一个else,现在又能用了。谢谢