node.js - express .js : Can't redirect after using session middleware

标签 node.js session express

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

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 抛出错误:Error: Can't发送后设置 header 。

如果我将此调用移到 app.use(express.session) 上方,它会抛出 500 错误,提示 session 未定义。而我的授权功能取决于 session 对象。

我能做什么?

编辑:这是 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() 调用链中的下一个中间件,可能最终会到达您的路线之一,然后尝试设置标题并失败。

关于node.js - express .js : Can't redirect after using session middleware,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11149985/

相关文章:

node.js - 仅当 active = true 时 Sequelize ORM 包含模型

ruby-on-rails - ActiveRecord SessionStore 的性能

javascript - 如何在同一 Node 服务器上渲染 Jade 模板和 HTML 文件?

node.js - Express.js Web 服务器在内存耗尽之前在生产环境中持续 5 分钟

javascript - 在 ionic 4 + Angular 中将日期转换为 DD/MM/YYYY

javascript - nodejs ws.Server 的特定选项

c# - 如何处理 session 中的对象数组

session - 什么用于 session 管理?

node.js - 页面未从 Express POST 路由呈现

javascript - 如何获取 jasmine-node 中错误的堆栈跟踪?