Sails 自定义 model 方法
在 Sails 中 model 提供了一些原生的静态方法,如 .create(), .update(), .destroy(), .find(), 等。
在实际业务中,有个经常做的操作是,在保存对象时,如果对象不存在就新增这个对象,否则就更新,就是一个 insertOrUpdate 的操作。而 model 中并未提供这个方法。MongoDB 倒是提供了个类似的原生方法,在 update 对象时加入 {upsert=true} 这个选项,但是返回的结果是一个数字,并不是 update 的对象,这点不符合需求。
那就考虑拓展 model 的的静态方法吧,sails 提供了很方便的拓展支持。
在 model.js 中加入以下方法。
module.exports.models = { insertOrUpdate: function(key, record, CB){ var self = this; // reference for use by callbacks var where = {}; where[key] = record[key]; // keys differ by model this.find(where).exec(function findCB(err, found){ if(err){ CB(err, false); } // did we find an existing record? if(found && found.length){ self.update(record[key], record).exec(function(err, updated){ if(err) { //returns if an error has occured, ie id doesn't exist. CB(err, false); } else { CB(false, found[0]); } }); }else{ self.create(record).exec(function(err, created){ if(err) { //returns if an error has occured, ie invoice_id doesn't exist. CB(err, false); } else { CB(false, created); } }); } }); }};
这样就可以了,像调用 create 方法一样调用自定义的 insertOrUpdate 方法。
参考: