博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sails 自定义 model 方法
阅读量:6219 次
发布时间:2019-06-21

本文共 1314 字,大约阅读时间需要 4 分钟。

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 方法。

参考:

转载于:https://www.cnblogs.com/myfjd/p/4646352.html

你可能感兴趣的文章
Makefile
查看>>
顺序容器
查看>>
asp 短信接口 解决产生的乱码问题
查看>>
AngularJS开发指南9:AngularJS作用域的详解
查看>>
Ajax:动态更新Web页面
查看>>
Iphone开发(四)文本框,文本视图,和软键盘的隐藏
查看>>
数据库结构设计注意
查看>>
iOS: Core Data入门
查看>>
swf相关开源的工具
查看>>
百度地图3.1.0(一)Hello BaiduMap
查看>>
Java设计模式--责任链模式
查看>>
Zenefits CodeSprint:Knight or Knave
查看>>
网络通信协议、UDP与TCP协议、UDP通信、TCP通信
查看>>
Ogg - 从oracle到mysql的同步
查看>>
js中判断对象类型的几种方法
查看>>
grep多条件和sed合并两行
查看>>
iOS 之 时间格式与字符串转换
查看>>
js导出CSV
查看>>
转:Linux中find命令-path -prune用法详解
查看>>
团队编程项目作业3-模块测试过程
查看>>