为什么sequelize beforeUpdate 钩子不起作用?

Mic*_*ino 9 javascript node.js express sequelize.js sequelize-hooks

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

User.beforeCreate(setSaltAndPass)
User.beforeUpdate(setSaltAndPass)
Run Code Online (Sandbox Code Playgroud)

第一个工作完美,但 beforeUpdate 不运行,根据文档,执行以下命令应该没有问题

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

         })
Run Code Online (Sandbox Code Playgroud)

将密钥保存为纯文本,例如在创建时不会发生这种情况。奇怪的是beforeBulkUpdate是在更新的时候执行的。

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

const setSaltAndPass = user => {
   if (user.changed('pass')) {
     user.salt = User.generateSalt()
     user.pass = User.encriptPass(user.pass(), user.salt())
   }
}
Run Code Online (Sandbox Code Playgroud)

完成它的工作,但钩子它没有执行。

小智 12

individualHooks: true,在选项块中设置

await User.update(user, {
  where: {
    id
  },
    individualHooks: true,
});
Run Code Online (Sandbox Code Playgroud)


Nik*_*Mol 2

我刚才在TS也遇到了同样的问题。事实证明,@BeforeUpdate当您第一次找到单个记录然后更新它时,会触发挂钩:

await Model.findOne(options).then((result) => { 
    result.update(options); 
});
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢这种Model.update(...)方法,可以使用@BeforeBulkUpdate钩子代替。

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

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