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

标签 javascript node.js sequelize.js

我在 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/

相关文章:

javascript - 在 asp.net 中运行代码时,React 组件未显示

javascript - 如何通过名称访问数组?

javascript - Cheerio 只给了我 img 的 src 属性值的一部分?

node.js - 了解 NPM 收缩包装

node.js - 如何使用sequelize ORM(即多线程)实现集群

mysql - Sequelize 查询,使用提供的值和表行值实现计算

javascript - 选择音乐文件夹 html

javascript - 如何获取单元格中嵌入的文本框的值

javascript - 无法读取 Node.js 中的 JSON 对象值?

postgresql - 如何查询自定义连接表