【问题标题】:saving session variables within a callback在回调中保存会话变量
【发布时间】:2013-03-31 04:02:41
【问题描述】:

我正在使用 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按预期工作的事实让我怀疑。

不知道还有什么可以尝试的!任何帮助都非常感谢....

【问题讨论】:

    标签: node.js session callback express socket.io


    【解决方案1】:

    我发现这是 express.io 框架的问题 - 我没有足够的资格深入研究代码以找出确切原因。

    相反,我使用了类似于此处概述的会话共享策略:http://howtonode.org/socket-io-auth

    效果很好,也不是很麻烦。 因此,我目前不建议使用 express.io。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2014-05-17
      • 1970-01-01
      • 2013-03-20
      • 2013-09-08
      相关资源
      最近更新 更多