如何在 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?

Activity的生命周期及常见回调顺序

SurfaceHolder 回调如何与 Activity 生命周期相关联?

pomelo生命周期回调和组件加入

React中组件的生命周期(详细)

React中组件的生命周期(详细)