【问题标题】:How to catch Sequelize Migration Errors and prevent adding migration to the SequelizeMeta table如何捕获 Sequelize 迁移错误并防止将迁移添加到 SequelizeMeta 表
【发布时间】:2020-10-14 14:44:36
【问题描述】:

我最近开始尝试使用 sequelize-cli 进行 Sequelize Migrations。我注意到如果迁移脚本抛出错误(使用 try-catch 块),sequelize-cli 仍然会使用迁移更新 SequelizeMeta 表,就好像它成功了一样。

捕获错误并防止 Sequelize 在“up”时将迁移输入到 SequelizeMeta 表中的最佳方法是什么,以及在“down”脚本失败时防止移除迁移?

【问题讨论】:

  • 为什么不喜欢抛出异常呢?似乎这是 Sequelize CLI 的一种自然方法
  • 我确实抛出了异常,正如我在问题中解释的那样,但是 sequelize-cli 仍然更新了 SequelizeMeta 表,就好像迁移成功一样。

标签: sequelize.js sequelize-cli


【解决方案1】:

使用事务来实现回滚由于这样的异常导致的所有迁移更改:

    up: (queryInterface) => queryInterface.sequelize.transaction(
        async (transaction) => {
            await queryInterface.createTable(table, attributes, { transaction });
            if (some_condition) {
              throw new Error('Error while migrating');
            }
        }
),

不要忘记在所有 Sequelize 方法调用中指明 transaction

请记住,并非所有 RDBMS 都支持结构更改回滚。

【讨论】:

    猜你喜欢
    • 2015-02-15
    • 2017-06-26
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    相关资源
    最近更新 更多