【问题标题】:why sequelize beforeUpdate hook doesn't work?为什么续集 beforeUpdate 挂钩不起作用?
【发布时间】:2020-10-18 11:32:38
【问题描述】:

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

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

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

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

         })

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

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

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

做它的工作,但钩它没有被执行。

【问题讨论】:

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


    【解决方案1】:

    我刚才在 TS 中遇到了同样的问题。结果,@BeforeUpdate 钩子被触发,当你第一次找到一条记录然后更新它时:

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

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

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

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

    【讨论】:

      【解决方案2】:

      您需要在更新功能中将individualHooks设置为true, 请看下面的例子

      const [, [user]] = await User.update(body, {
            where,
            returning: true,
            attributes: ['userId', 'email'],
            individualHooks: true,
          });
      

      【讨论】:

        【解决方案3】:

        在选项块中设置individualHooks: true,

        await User.update(user, {
          where: {
            id,
            individualHooks: true,
          }
        });
        

        【讨论】:

        • 解释更多关于这个问题以及你为解决它做了什么。让其他用户从您的回答中受益
        【解决方案4】:

        在 beforeUpdate 上使用 beforeBulkUpdate 代替

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-21
          • 1970-01-01
          • 2021-07-11
          • 2022-06-16
          • 2020-04-22
          • 1970-01-01
          相关资源
          最近更新 更多