Node.js Express.js:Can';使用会话中间件后不能重定向

Node.js Express.js:Can';使用会话中间件后不能重定向,node.js,session,express,Node.js,Session,Express,我正在编写一个身份验证中间件,它应该在成功登录我们的注销后重定向到以前访问过的页面。以下是完整的配置块: app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.static(__dirname + '/public')); app.use(express.bodyParser()); app.use(ex

我正在编写一个身份验证中间件,它应该在成功登录我们的注销后重定向到以前访问过的页面。以下是完整的配置块:

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.static(__dirname + '/public'));
  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.session({ secret: '__YouDontKnow__', store: new RedisStore }));
  app.use(authCheck.run);
  app.use(express.methodOverride());
  app.use(app.router);
});
现在,当
app.use(authCheck.run)
位于
app.use(express.session)
下时,express抛出错误:错误:发送邮件后无法设置邮件头

如果我将此调用移到app.use(express.session)上方,它会抛出一个500错误,表示会话未定义。我的身份验证函数取决于会话对象

我能做什么

编辑:以下是authCheck函数:

exports.run = function (req, res, next) {
  var urlparser = GLOBAL.urlparser,
      url = req.urlp = urlparser.parse(req.url, true),

      goToLastPage = function() {
        var redirectUrl = (req.session.lastVisitedPage) ? req.session.lastVisitedPage : '/';
        console.log("goToLastPage(%s)", redirectUrl);
        res.redirect(redirectUrl);
        return;
      }

  // Log out
  if (url.pathname == '/user/logout') {
    req.session.destroy();
    console.log('User has logged out');
    goToLastPage();
  }

  // Log in
  if (url.pathname == '/user/login' && req.method == 'POST') {
    var email = req.body.login.email,
        password = req.body.login.password;

    req.session.auth = true;
    req.session.userId = 1;

    console.log('User has logged in');

    goToLastPage();
  }

  next();
  return;
}

在调用
goToLastPage()
之后放置一个
return
。调用
res.redirect
后,您仍在调用
next()
,它调用链中的下一个中间件,可能最终会碰到您的一个路由,然后该路由尝试设置一个头并失败。

能否提供有关authCheck.rundoe的更多信息?您是否有任何特别的操作会引发错误?