如何在 Sails 中恢复生命周期回调?
Posted
技术标签:
【中文标题】如何在 Sails 中恢复生命周期回调?【英文标题】:How can I restore lifecycle callbacks in sails? 【发布时间】:2015-02-17 19:42:54 【问题描述】:在测试模型创建后,我注意到生命周期回调没有被调用,在阅读 Waterline 的文档后我发现:
注意:使用自定义适配器方法时,不使用 Waterline 的功能。您不再像使用已定义的 Waterline 方法那样获得生命周期回调和验证。
不过,我没有故意使用自定义适配器方法,这是我在文档中可以找到的关于生命周期回调被禁用的唯一参考。
我应该对 config/* 中的任何文件进行哪些标准/设置,以绝对确保生命周期回调未被禁用?
这是我使用的唯一生命周期回调没有被调用的模型的副本:
/**
* User.js
*
*/
var bcrypt = require('bcrypt');
module.exports =
attributes:
'email':
type: 'email',
required: true,
unique: true
,
'username':
type: 'string',
required: true,
unique: true,
minLength: 5,
maxLength: 16
,
'password':
type: 'string',
required: true
,
'family':
model: 'family'
,
'lastlogin':
type: 'datetime',
defaultsTo: function() return new Date().toISOString();
,
beforeCreate: function(obj, cb)
console.log("In beforeCreate");
bcrypt.hash(obj.password, 10, function(err, hash)
if (err)
console.log(err);
return cb(err);
obj.password = hash;
cb();
);
;`
【问题讨论】:
除非您使用自定义方法,否则该注释应该没有任何意义。您是否使用自定义方法?您可能想发布您的代码示例。 我不知道,但我添加了它,因为它是 Waterline 文档中我能找到的关于禁用生命周期回调的唯一参考。 【参考方案1】:您的回调需要在导出对象上,而不是属性。
/**
* User.js
*
*/
var bcrypt = require('bcrypt');
module.exports =
attributes:
'email':
type: 'email',
required: true,
unique: true
,
'username':
type: 'string',
required: true,
unique: true,
minLength: 5,
maxLength: 16
,
'password':
type: 'string',
required: true
,
'family':
model: 'family'
,
'lastlogin':
type: 'datetime',
defaultsTo: function() return new Date().toISOString();
,
,
beforeCreate: function(obj, cb)
console.log("In beforeCreate");
bcrypt.hash(obj.password, 10, function(err, hash)
if (err)
console.log(err);
return cb(err);
obj.password = hash;
cb();
);
;
【讨论】:
发生在我们所有人身上。以上是关于如何在 Sails 中恢复生命周期回调?的主要内容,如果未能解决你的问题,请参考以下文章
Sails.js:模型的生命周期回调:它们是不是支持 beforeFind 和 afterFind?