node.js 下 sails orm框架 WaterLine 生命周期介绍
文章目录
上一篇是关于 sails 定义模型models 属性字段定义类型
这一篇和大家分享关于 sails 的 orm框架 WaterLine 在与数据库操作过程中的生命周期控制.
生命周期
WaterLine 在执行过程中的生命周期可以简单的理解为:
调用前干什么
调用中.....
调用后干什么
具体有哪些操作会执行上面的生命周期
创建 create
创建记录时生命周期依次执行下面几个步骤:
验证模型数据之前..
验证模型数据之后..
创建记录之前..
创建记录之后..
beforeValidate: fn(values, callback)
afterValidate: fn(values, callback)
beforeCreate: fn(values, callback)
afterCreate: fn(newlyInsertedRecord, callback)
在回调函数 callback 中用代码来实现某一个生命周期中的业务逻辑.
更新 update
更新记录时和上面的生命周期有类似的步骤:
验证模型数据之前..
验证模型数据之后..
更新模型之前..
更新模型之后..
beforeValidate: fn(values, callback)
afterValidate: fn(values, callback)
beforeUpdate: fn(values, callback)
afterUpdate: fn(values, callback)
同样在回调函数 callback 中用代码来实现生命周期中的业务逻辑
销毁 destroy
销毁记录时的生命周期和上面有所不同:
销毁之前..
销毁之后..
销毁过程的生命周期一共有2个步骤
beforeDestroy: fn(criteria, callback)
afterDestroy: fn(destroyedRecords, callback)
同样在回调函数中拦截某个生命周期,用代码实现业务逻辑
示例
创建一个用户模型有2个字段 ,分别是 username 和 password
我们在创建模型的生命周期 beforeCreate 函数做一些事情:
创建前我们针对模型中的pssword 字段进行 hash 算法加密,然后写入到数据库中.
var bcrypt = require('bcrypt');
module.exports = {
attributes: {
username: {
type: 'string',
required: true
},
password: {
type: 'string',
required: true
}
},
beforeCreate: function (values, callback) {
bcrypt.hash(values.password, 10, function(err, hash) {
if(err) return cb(err);
values.password = hash;
callback();
});
}
};