【问题标题】:How can I restore lifecycle callbacks in sails?如何在 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 文档中我能找到的关于禁用生命周期回调的唯一参考。

标签: sails.js lifecycle 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();
    });
   }

};

【讨论】:

  • 发生在我们所有人身上。
猜你喜欢
  • 1970-01-01
  • 2013-10-25
  • 2023-04-05
  • 2015-05-18
  • 1970-01-01
  • 2023-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多