2012-04-28 5 views
0

私はログインして小さなアプリケーションを開発し、セッションデータにアクセスする際に問題が発生しました。node.js mongooseセッションの問題。定義されているときは未定義ですか?

NB:急行3.0、コーヒー・スクリプトを使用して

をマングースだから私のアプリでは、私が持っている以下:私のlogin.coffeeで

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

私は次のようにします。

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 '/' 

翡翠で#{session.user}を出力すると、[bject,Object]が表示されますが、「名前」または「メール」に入力すると空白になります。

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エラーを与える私がコンソールに入るとapp.coffeeでセッションオブジェクトをログに記録する場合は、以下を参照してくださいすることができますその定義されていないと言っている..しかし、私はあなたがそれが定義されて見ることができるので、なぜ知りません。

EDIT:

解決しました。ユーザーが手をつける前にアプリケーションの非同期問題が続いていました。 を見つけるのは、コールバックを送信し、アプリケーションフローと非同期問題があり、次の()

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

解決済みです。非同期の問題でした – Menztrual

答えて

1

使用する必要がありました。結果が返される前にサーバーが継続しているため、未定義です。

+0

これはまさに私が必要としていたものでした。ありがとう! – Menztrual

関連する問題