大家好!
我在下面定义了一个Mongoose模式并注册了一个模型(InventoryItemModel).有没有办法为模式创建自定义构造函数,这样当我从模型中实例化一个对象时,将调用该函数(例如,从数据库加载带有值的对象)?
var mongoose = require('mongoose')
, Schema = mongoose.Schema
var InventoryItemSchema = new Schema({
Sku : String
, Quanity : Number
, Description : String
, Carted : []
, CreatedDate : {type : Date, default : Date.now}
, ModifiedDate : {type : Date, default : Date.now}
});
mongoose.model('InventoryItem', InventoryItemSchema);
var item = new InventoryItem();
Run Code Online (Sandbox Code Playgroud)
我可以添加一些自定义构造函数,以便在实例化时从数据库中填充项目吗?
hun*_*tis 14
根据您想要的方向,您可以:
1)使用钩子
模型初始化,验证,保存和删除时会自动触发挂钩.这是"由内而外"的解决方案.你可以在这里查看文档:
2)为模式编写静态创建函数.
静态模型存在于模型对象上,可用于替换创建新模型等功能.如果您的create步骤有额外的逻辑,您可以自己在静态函数中编写它.这是'从外到内'的解决方案:
下面是从选项#2的实现@hunterloftis的答案.
2)为模式编写静态创建函数.
someSchema.statics.addItem = function addItem(item, callback){
//Do stuff (parse item)
(new this(parsedItem)).save(callback);
}
Run Code Online (Sandbox Code Playgroud)
如果要从someSchema创建新模型,而不是
var item = new ItemModel(itemObj);
item.save(function (err, model) { /* etc */ });
Run Code Online (Sandbox Code Playgroud)
做这个
ItemModel.addItem(itemObj, function (err, model) { /* etc */ });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16181 次 |
| 最近记录: |