Javascript 请求会话don';不设置post请求

Javascript 请求会话don';不设置post请求,javascript,node.js,session,express,Javascript,Node.js,Session,Express,我是node.js的新手,我尝试在Express中实现最简单的授权。我想将req.session.userId设置为数据库中的用户id。我可以使用简单的表单和post请求从数据库中获取用户id,但我不能设置req.session.userId。对我来说,最不可理解的事情是——为什么有时候req.session工作,有时候不工作。 我的解释代码。 在app.js的中: 配置段: app.use(express.session({secret: 'asdads', key: 'sid', cooki

我是node.js的新手,我尝试在Express中实现最简单的授权。我想将
req.session.userId
设置为数据库中的用户id。我可以使用简单的表单和post请求从数据库中获取用户id,但我不能设置
req.session.userId
。对我来说,最不可理解的事情是——为什么有时候req.session工作,有时候不工作。 我的解释代码。 在app.js的中:

配置段:

app.use(express.session({secret: 'asdads', key: 'sid', cookie: { maxAge: 600000, httpOnly: false }}));
之后,我通过以下方式处理POST请求:

app.post('/login', routes.authorize);
我的路线。授权:

exports.authorize = function(req, res){
    if(req.body){
        var login = req.body.login;
        var password = req.body.password;
  //gET USER FROM DATABASE
        db.getUser(login, password, function(err, results){
  //ensure that results is correct
            console.log(results);
            if(err){ res.send("User not found", 500); return;}
  //PLACE WITH BUG :)
            req.session.userId = results[0].id; 
        });
    }
    res.render('login', { title: 'Express!' });
}
我想我不能在这里设置req.session.userId,因为我是通过POST访问这里的。如果我是对的,请帮助我在这里访问
req.session


提前感谢。

我认为问题在于您在
db.getUser()完成之前立即响应了请求。IIRC快速会话中间件在发送响应时保存会话更改,因此请尝试以下操作:

exports.authorize = function(req, res) {
  if (!req.body)
    return res.render('login', { title: 'Express!' });

  var login = req.body.login;
  var password = req.body.password;

  db.getUser(login, password, function(err, results) {
    if (err)
      return res.send("User not found", 500);
    req.session.userId = results[0].id;
    res.render('login', { title: 'Express!' });
  });
}

非常感谢你!我考虑过同步/异步执行,但我只在第二天使用node.js,所以很难捕捉到这样的bug!如果你在这里……:)如何在req.session.userId=results[0].id;?之后重定向??您可以使用重定向。我确实尝试过,但如果在req.session.userId=results[0]之后使用,则无法重定向;这对我很有用。