2012-04-28 69 views
0

即時通訊開發一個小應用程序與登錄和訪問會話數據有問題。node.js mongoose會話問題。定義時未定義?

注:使用快遞3.0,咖啡腳本和貓鼬

所以,在我的應用我有以下幾點:

app.locals.use (req,res) -> 
    res.locals.session = req.session 
    res.locals.title = config.title 
    res.locals.href = config.href 

在我login.coffee我做了以下內容:

ModelUser.findOne {email: email, password: password}, (err, results) -> 
    if err then console.log err 
    if results? 
     req.session.user = results 
     req.session.authenticated = true 
     res.redirect '/' 
    else 
     req.session.error = 'bad login' 
     res.redirect '/' 

如果我在Jade中輸出#{session.user},我得到[bject,Object],但是如果我輸入「name」或「email」,它將返回空白。如果我進入控制檯並登錄會話對象在app.coffee,你可以看到如下:

if req.session? then console.log req.session.user

回報:

{ _id: '4f9b60ba7a7ab7e7f711920e', 
    email: '[email protected]', 
    name: 'Demo User', 
    password: '078d2bf82ee269cd9577588d212655c3a2162dc5b09e7c29c6a343926ee881a9' } 

但如果做console.log req.session.user.email它給了我一個500錯誤說它沒有定義..但我不知道爲什麼,因爲你可以看到它被定義。

編輯:

解決;在獲得用戶之前,應用程序仍然處於異步問題。 只好回調發送到查找和使用next()的

if req.session.authenticated 
    require('./lib/getUser')(req.session.uid, (results) -> 
     res.locals.user = results 
     console.log res.locals 
     done() 
    ) 
    else 
    done() 
+0

解決了它。是異步問題 – Menztrual 2012-04-28 04:42:44

回答

1

有一個與應用程序流異步問題。結果返回之前,服務器正在繼續,因此未定義。

+0

這正是我所需要的。謝謝! – Menztrual 2012-07-05 03:32:58