我有一个带有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())
}
}
做好了自己的工作,但没有执行它。
答案 0 :(得分:2)
我刚才在TS中遇到了同样的问题。原来,当您第一次找到一条记录然后对其进行更新时,@BeforeUpdate
钩会被触发:
await Model.findOne(options).then((result) => {
result.update(options);
});
如果您更喜欢Model.update(...)
方法,则可以改用@BeforeBulkUpdate
钩子。
在这里找到此信息:https://github.com/sequelize/sequelize/issues/6253
这对我有用,希望对您有所帮助!