1

Mongoose ODM を使用する Express.js アプリを作成しています。ドキュメントが作成/更新されると、いくつかのフィールドが自動的に入力されるようにしたい:

  • によって作成された
  • 作成日

それを実装するのに適切な場所は、それらのプロパティでドキュメントを拡張し、フィールドにデータを入力するためのデフォルトおよび/またはマングース ミドルウェアを提供する Mongoose プラグインにあるように思えます。

ただし、プラグインのセッションからユーザー名を取得する方法がまったくわかりません。なにか提案を?

/**
 * A mongoose plugin to add mandatory 'createdBy' and 'createdOn' fields.
 */
 module.exports = exports = function auditablePlugin (schema, options) {
   schema.add({
     createdBy: { type: String, required: true, 'default': user }
   , createdOn: { type: Date, required: true, 'default': now }
   });
 };

 var user = function(){
   return 'user'; // HOW to get the user from the session ???
 };

 var now = function(){
   return new Date;
 };
4

1 に答える 1

0

このようにこれを行うことはできませんuser。このスキーマのプロトタイプメソッドとしてbacause関数が追加されています。特に、要求/応答に依存しません。ただし、ハックがあります。objタイプのオブジェクトがある場合は、次のschemaことができます。

obj.session = req.session;

リクエストハンドラで。次に、関数からセッションにアクセスできます。ただし、これにより他の問題が発生する可能性があり(たとえば、このコレクションでcronジョブを実行する)、私には非常に悪い習慣のように見えます。

現在のユーザーがこのスキーマオブジェクトを作成するときに、手動でそれを行うことができますね。または静的メソッドを作成します。

MySchema.statics.createObject = function ( user ) {
    // create your object
    var new_object = MySchema( ... );
    // set necessary fields
    new_object.createdBy = user.username;
}
于 2012-08-02T10:39:37.580 に答える