6

私は mongoose (ノード上) を使用しており、保存時に Mongoose ミドルウェアを使用してモデルにフィールドを追加しようとしています。

私は、lastmodifiedsince-date を追加したいというよく使用されるケースを取り上げています。ただし、保存を行ったユーザーの名前/プロファイルリンクも自動的に追加したいと考えています。

schema.pre('save', function (next) {
  this.lasteditby=req.user.name; //how to get to 'req'?
  this.lasteditdate = new Date();
  next()
})

私はパスポートを使用しています - http://passportjs.org/ - その結果、req.user が存在し、reqもちろん http-request になります。

ありがとう

編集

埋め込みインスタンスの親をpre呼び出している間に、埋め込みスキーマを定義しました。save以下に投稿された解決策 (保存の最初のパラメーターとして arg を渡す) は、埋め込まれていないケースでは機能しますが、私の場合は機能しません。

4

3 に答える 3

12

データをModel.save()呼び出しに渡すことができ、それがミドルウェアに渡されます。

// in your route/controller
var item = new Item();
item.save(req, function() { /*a callback is required when passing args*/ });

// in your model
item.pre('save', function (next, req, callback) {
  console.log(req);
  next(callback);
});

残念ながら、これは今日の埋め込みスキーマでは機能しません(https://github.com/LearnBoost/mongoose/issues/838を参照)。回避策の1つは、プロパティを親にアタッチしてから、埋め込まれたドキュメント内でそのプロパティにアクセスすることでした。

a = new newModel;
a._saveArg = 'hack';

embedded.pre('save', function (next) {
  console.log(this.parent._saveArg);
  next();
})

この機能が本当に必要な場合は、上記でリンクした問題を再度開くことをお勧めします。

于 2012-05-07T16:57:32.500 に答える