我正在使用express.io ...
在我的一个路由事件中,我从数据库加载存储的“投票”,然后尝试针对请求的会话进行设置:
app.io.route('ready', function(req){
if(req.session.username || req.session.twitter_user){
if(!req.session.username){ //makes the username to store in the session.
req.session.username = 't_' + req.session.twitter_user.screen_name;
}
winston.debug(req.session.username + ' connected'); //redders6600 connected.
db.getVote(req.session.username, function(err, vote){ //gets votes for the user.
if(!err){
req.session.vote = vote[0].vote;
req.io.emit('user data', {username: req.session.username, vote: req.session.vote});
//on the client, I receive this event, and it correctly contains username and vote
}
});
}
});
这一切正常,但当我尝试从另一个路由事件访问会话数据时,req.session.vote
未定义。 req.session.username
设置正确。
我知道vote[0].vote
肯定不是未定义的,并且在客户端代码打印出“用户数据”事件中的投票数据时验证了它,所以我真的很困惑发生了什么。最初我认为它必须与回调函数的上下文有关,但req.io.emit
按预期工作的事实让我怀疑。
不确定还有什么要尝试的!任何帮助非常感谢....
答案 0 :(得分:0)
我发现这是express.io框架的一个问题 - 我没有足够的资格深入研究代码以找出原因。
相反,我使用了类似于此处概述的会话共享策略:http://howtonode.org/socket-io-auth
哪种方法运作良好,并且没有太大的麻烦。 因此,我目前不推荐使用express.io。