为什么对beforeUpdate挂钩进行续集不起作用?

时间:2020-10-18 11:32:38

标签: javascript node.js express sequelize.js sequelize-hooks

我有一个带有2个钩子的简单用户模型。

User.beforeCreate(setSaltAndPass)
User.beforeUpdate(setSaltAndPass)

第一个可以正常运行,但是beforeUpdate无法运行,根据文档,执行以下操作应该没有问题

await User.update(user, {
             where: {
               id
             }

         })

将密钥另存为纯文本,例如对于create来说不会发生。奇怪的是,更新后将执行beforeBulkUpdate。

这是回调,详细信息是,我没有更改的属性,或者至少我不知道如何访问它。

const setSaltAndPass = user => {
   if (user.changed('pass')) {
     user.salt = User.generateSalt()
     user.pass = User.encriptPass(user.pass(), user.salt())
   }
}

做好了自己的工作,但没有执行它。

1 个答案:

答案 0 :(得分:2)

我刚才在TS中遇到了同样的问题。原来,当您第一次找到一条记录然后对其进行更新时,@BeforeUpdate钩会被触发:

await Model.findOne(options).then((result) => { 
    result.update(options); 
});

如果您更喜欢Model.update(...)方法,则可以改用@BeforeBulkUpdate钩子。

在这里找到此信息:https://github.com/sequelize/sequelize/issues/6253

这对我有用,希望对您有所帮助!