req.session不设置发布请求

时间:2014-10-07 12:36:49

标签: javascript node.js session express

我是node.js的新手,我尝试在Express中实现最简单的授权。我想将req.session.userId设置为来自数据库的用户ID。我可以使用简单的表单和发布请求从数据库中获取用户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

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为问题是您在db.getUser()完成之前立即回复了请求。 IIRC Express会话中间件在发送响应时保存会话更改,因此请尝试这样的事情:

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!' });
  });
}