我正在开发一个带有登录名的小型应用程序,并且在访问会话数据时遇到问题。
注意:使用 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 '/'
如果我#{session.user}
在 Jade 中输出,我会得到[bject,Object]
,但如果我输入“名称”或“电子邮件”,它会返回空白。如果我进入控制台并在 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()