2013-04-08 125 views
0

我使用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

我發現這是一個與express.io框架的問題 - 我沒有足夠的資格深入到代碼來找出原因。

相反,我用一個類似於這裏提出了一個會話共享策略:http://howtonode.org/socket-io-auth

後就正常了,是不是一個巨大的麻煩量。 因此,我目前不推薦使用express.io。