将模型参数传递到mongoose模型

时间:2013-02-19 13:53:25

标签: node.js mongodb express mongoose

我有一个与用户模型关联的猫鼬模型,例如

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附加到请求主体的最佳方法?或者有没有我想过的方式?

3 个答案:

答案 0 :(得分: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 }))

答案 1 :(得分: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 },否则您可能会保存不需要的/攻击者数据。

答案 2 :(得分:0)

从Node 8.3开始,您还可以使用Object Spread syntax

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

请注意,顺序很重要,后面的值会覆盖前面的值。