创建新用户帐户时,我会创建 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();
}
}