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();
  }
}

Ответы на вопрос(3)

Ваш ответ на вопрос