新しいユーザー アカウントが作成されたら、次のような Mongoose モデル インスタンスである newUser を作成します。
_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();
}
}