【发布时间】:2013-09-01 23:25:59
【问题描述】:
创建新用户帐户后,我创建 newUser,这是一个 Mongoose 模型实例,如下所示:
_events: Object
errors: undefined
isNew: false
save: function () {
arguments: null
caller: null
_doc: Object
name: 'Joe Smith'
...
对象的实际数据在 _doc 属性中,尽管 getter 和 setter 存在,因此您可以运行:
user.name = 'Jane Doe'
这样就可以了。我跑:
request.session.user = newUser;
将用户保存到会话中。到目前为止,一切顺利。
但是,在随后的请求中,request.session.user 似乎只是 _doc 中的东西。例如:
name: 'Joe Smith'
这很好,但这意味着我不能运行例如 request.session.user.save() 来保存更改。
我可以简单地制作一些中间件来查找与数据关联的用户。但我想了解更多关于 Express 和 Mongoose 在这里所做的事情。
如何让 request.session.user 成为 Mongoose 模型?
更新:我目前的中间件破解:
// Use as a middleware on routes which need users
// TODO: only needed due to request.session.user being saved weirdly
var rehydrateUser = function(request, response, next) {
if ( request.session.user ) {
var hydrated = request.session.user.save
if ( ! hydrated ) {
console.log('Rehydrating user...');
models.User.findOne({ somefield: request.session.user.somefield }, function (err, user) {
if ( err ) {
request.session.error = 'User not found in DB!';
request.redirect('/');
} else {
request.session.user = user;
console.log('Rehydrated user! All repos already being monitored.');
next();
}
})
} else {
next();
}
} else {
console.log('No user in session')
next();
}
}
【问题讨论】:
标签: node.js mongodb session express mongoose