node.js mongoose会话问题。定义时未定义?

时间:2012-04-28 04:00:18

标签: node.js coffeescript mongoose express

我正在使用登录开发一个小应用程序并且在访问会话数据时遇到问题。

nb:使用express 3.0,coffee-script和mongoose

所以在我的应用程序中,我有以下内容:

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: 'foobar@gmail.com',
  name: 'Demo User',
  password: '078d2bf82ee269cd9577588d212655c3a2162dc5b09e7c29c6a343926ee881a9' }

但如果做console.log req.session.user.email它会给我一个500错误,说它没有定义..但我不知道为什么,因为你可以看到它被定义。

修改

解决;在获得用户之前,应用程序仍然是一个异步问题。 不得不向find发送回调并使用next()

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

1 个答案:

答案 0 :(得分:1)

应用程序流存在异步问题。在返回结果之前服务器仍在继续,因此未定义。