Express - 会话在发送响应后无法设置会话变量?

时间:2014-05-29 15:12:55

标签: node.js session express session-variables

在我的代码时间方面,在res.send中设置会话变量(req.session.variable)之前调用express-session。像这样的东西

app.get('/test', function(req, res) {
  FB.api('/', function(fbResponse) {
    req.session.variable = 100;
  });
  res.send('test');
});

现在这个,不会设置变量。这是一个错误,还是有一些逻辑上的理由说明为什么express-session不允许上述内容?如果是这样,你能举一个可以被滥用的反例吗?

3 个答案:

答案 0 :(得分:4)

正如@tymeJV所说:

app.get('/test', function(req, res) {
  FB.api('/', function(fbResponse) {
    req.session.variable = 100;
    res.send('test');
  });
});

答案 1 :(得分:1)

根据其他人的建议,会话应在响应之前设置如下

app.get('/test', function(req, res) {
  FB.api('/', function(fbResponse) {
    req.session.variable = 100;
    res.send('test');
  });
});

但是我想知道为什么不在回复之后设置它,为什么赢得express-session允许相同。我发现一些req.session函数在响应之后毫无意义,因此可能会在巨大的代码中产生混淆。例如响应后req.session.regenerate毫无意义,因此已发送cookie。但我想,快递会议还不够成熟,不能为这些功能提供不同的类别。

答案 2 :(得分:0)

您有两个异步执行的回调函数: function(req,res) function(fbResponse)。您的 res.send('test')行正在函数(fbResponse)完成之前执行(因为这是一个异步函数)。如果要在编写res之前确保设置会话变量,则应在代码中的内部回调函数内移动 res.send('test')行,如其他答案中所述。