7

ユーザーモデルと関連付けられたマングースモデルがあります。

var exampleSchema = mongoose.Schema({
   name: String,
   <some more fields>
   userId: { type:mongoose.Schema.Types.ObjectId, ref: 'User' }
});

var Example = mongoose.model('Example', userSchema)

新しいモデルをインスタンス化するときは、次のようにします。

// the user json object is populated by some middleware 
var model = new Example({ name: 'example', .... , userId: req.user._id });

モデルのコンストラクターは多くのパラメーターを受け取りますが、スキーマが変更されたときに記述してリファクタリングするのは面倒です。次のような方法はありますか:

var model = new Example(req.body, { userId: req.user._id });

それとも、ヘルパー メソッドを作成して JSON オブジェクトを生成したり、userId をリクエスト本文に添付したりする最良の方法はありますか? それとも、私が考えもしなかった方法がありますか?

4

3 に答える 3

7
_ = require("underscore")

var model = new Example(_.extend({ userId: req.user._id }, req.body))

または、userIdをreq.bodyにコピーする場合:

var model = new Example(_.extend(req.body, { userId: req.user._id }))
于 2013-02-19T14:04:00.617 に答える
4

私があなたを正しく理解していれば、あなたは次のことを試してみるのが良いでしょう:

// We "copy" the request body to not modify the original one
var example = Object.create( req.body );

// Now we add to this the user id
example.userId = req.user._id;

// And finally...
var model = new Example( example );

また、スキーマオプションを追加することを忘れないでください { strict: true }。そうしないと、不要な/攻撃者のデータが保存される可能性があります。

于 2013-02-19T14:04:17.337 に答える
0

Node 8.3 以降、 Object Spread syntaxも使用できます。

var model = new Example({ ...req.body, userId: req.user._id });

順序が重要であり、後の値が前の値を上書きすることに注意してください。

于 2020-09-21T22:10:03.267 に答える