gpt4 book ai didi

javascript - 更新时调用了两次 Sequelize afterValidate 钩子(Hook)

转载 作者:行者123 更新时间:2023-12-03 22:19:45 34 4
gpt4 key购买 nike

我在 Node 后端使用 Sequelize 来访问 MySQL 数据库,我意识到,根据您更新对象的方式,afterValidate hook 被调用一次或两次。我会用一个例子更好地解释它:

我们有一个 Shop由以下 Sequelize 模型定义的实体:

module.exports = (sequelize, DataTypes) => {
const Shop = sequelize.define('Shop', {
name: DataTypes.STRING,
address: DataTypes.STRING
}, {
freezeTableName: true,
hooks: {
afterValidate: (shop, options) => {
shop.name += '_HOOKED!'; // Just for testing
}
}
});
};

我使用 db.Shop.create() 添加了几家商店id 为 1 和 2。现在,我正在尝试 Sequelize 提供的以下 2 个选项来更新商店对象:

选项 1
db.Shop.update({ name: 'Coffee Shop TEST' }, 
{ where: { id: shop.id } }).then((data) => {
console.log("All good!!");
}).catch((error) => {
console.log("No good: ", error);
});

选项 2
db.Shop.findOne({ where: { id: 1 } }).then((shop) => {
shop.update({ name: 'Coffee Shop TEST' }).then((data) => {
console.log("All good!!: ");
}).catch((error) => {
console.log("No good: ", error);
});
}).catch((error) => {
console.error("Error al actualizar: ", error);
});

如果我使用第一个选项,商店会正确更新, afterValidate钩子(Hook)被调用一次,所以现在的名字是: Coffee Shop TEST_HOOKED! .

但是,如果我使用第二个选项,钩子(Hook)会被调用两次,因此名称被错误地设置为 Coffee Shop TEST_HOOKED!_HOOKED!。 .

为什么会这样?提前致谢,

最佳答案

我可能有点晚了,但对于遇到这个问题的人来说,这里是解决方案:
您可以设置options.validate = false在模型的 beforeUpdate Hook 中。
出于某种原因,Sequelize 在更新对象时会运行 afterValidate 钩子(Hook)两次...

关于javascript - 更新时调用了两次 Sequelize afterValidate 钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58714896/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com