orm2 中文文档 3.3 模型钩子
来源:互联网 发布:淘宝上刻的公章能用吗 编辑:程序博客网 时间:2024/06/05 03:05
译者:飞龙
来源:Model Hooks
如果你想要监听发生在模型实例上的事件,你可以附带一个函数,它会在发生时调用。
现在支持下面这些事件:
afterLoad
:(无参数)加载和准备所用实例之后;afterAutoFetch
:(无参数)自动获取关联(如果有的话)之后,无论有没有关联都会触发;beforeSave
:(无参数)尝试保存之前;afterSave
:(bool success)保存之后;beforeCreate
:(无参数)尝试保存新的实例之前(优先于beforeSave
);afterCreate
:(bool success)保存新的实例之后;beforeRemove
:(无参数)尝试删除实例之前;afterRemove
:(bool success)删除实例之后;beforeValidation
:(无参数)在所有验证之前,优先于beforeCreate
和beforeSave
。
所有钩子函数调用时,this
为对应的实例,所以你可以访问到与之相关的任何东西。
对于所有before*
钩子,你可以添加一个额外的参数到钩子函数中。这个函数用来告诉钩子应该继续执行下去还是中断。你或许已经从Express的工作流中熟悉了这一点。下面是一个示例:
var Person = db.define("person", { name : String, surname : String}, { hooks: { beforeCreate: function (next) { if (this.surname == "Doe") { return next(new Error("No Does allowed")); } return next(); } }});
这个工作流允许你在调用next
之前执行异步的操作。如果你不打算使用next
就不要把它定义为参数,否则会阻塞工作流。
常见问题
一个常见问题涉及到在钩子内部的嵌套回调中访问this
。这个问题的原因是,this
对象仅仅在顶级钩子函数的作用域内是有效的,而在回调中会有各种不同的值。要解决这一问题,可以创建一个对象保存this
的引用,并且在回调中用它来访问模型的属性。
示例
var Person = db.define("person", { name : String, surname : String}, { hooks: { beforeCreate: function (next) { var _this = this; checkName(this, function(err, result)) { if(err) return next(err); _this.name = result.name; _this.surname = result.surname; next(); } } }});
0 0
- orm2 中文文档 3.3 模型钩子
- orm2 中文文档 3. 定义模型
- orm2 中文文档 3.1 模型属性
- orm2 中文文档 3.2 模型验证器
- orm2 中文文档
- orm2 中文文档 5. 同步和删除模型
- orm2 中文文档 2. 设置
- orm2 中文文档 8. 聚合
- orm2 中文文档 1. 连接到数据库
- orm2 中文文档 4. 定义关联
- orm2 中文文档 6. 查找记录
- orm2 中文文档 4.1 hasOne(多对一关系)
- orm2 中文文档 4.2 hasMany(多对多关系)
- orm2 中文文档 4.3 extendsTo(一对一关系)
- orm2 中文文档 7. 创建和更新记录
- 【Chromium中文文档】进程模型
- Sequel中文文档-模型-关联基础
- 【Scikit-Learn 中文文档】广义线性模型
- hdu 1226 超级密码
- CSS 弹性布局如何实现
- 24. Swap Nodes in Pairs leetcode Python 2016 new Season
- xcode C++一些简单设置
- Centos7原生的repo源下载---备忘
- orm2 中文文档 3.3 模型钩子
- fflush 函数
- 泛谈手机app测试
- 不同的OS
- [转]简明网络I/O模型---同步异步阻塞非阻塞之惑
- 从僵尸网络追踪到入侵检测 第4章 Honeyd动态模板防御扫描软件攻击
- Python基础01-04
- centos6.5 RPM 包安装 Mysql
- orm2 中文文档 4. 定义关联