Express cookieSession и Mongoose: как сделать request.session.user моделью для Mongoose?
Когда создается новая учетная запись пользователя, я создаю newUser, экземпляр модели Mongoose, который выглядит следующим образом:
_events: Object
errors: undefined
isNew: false
save: function () {
arguments: null
caller: null
_doc: Object
name: 'Joe Smith'
...
Фактические данные для объекта находятся в_doc свойство, хотя геттеры и сеттеры существуют, поэтому вы можете запустить:
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();
}
}