在我的代码时间方面,在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
不允许上述内容?如果是这样,你能举一个可以被滥用的反例吗?
答案 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')行,如其他答案中所述。