【问题标题】:Sequelize CLI : cannot read property 'replace' of undefined when migrating DBSequelize CLI:迁移数据库时无法读取未定义的属性“替换”
【发布时间】:2019-07-12 09:01:39
【问题描述】:

我正在尝试使用 db:migrate 函数迁移数据库,但是我打印了错误:

错误:无法读取未定义的“替换”属性

我已经在 GitHub 上针对此错误参考了其他解决方案,但没有一个解决问题。我正在使用 sequelize-cli 执行迁移。

这是我的模型:

    'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Containers', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      name: {
        type: Sequelize.STRING
      },
      userId: {
          type: Sequelize.INTEGER,
          references: "Users",
          refereceKey: "id",
          onUpdate: "cascade",
          onDelete: "cascade",
      },
      type: {
        type: Sequelize.STRING
      },
      detail: {
        type: Sequelize.INTEGER
      },
      checkin: {
        type: Sequelize.DATE
      },
      checkout: {
        type: Sequelize.DATE
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Containers');
  }
};

我试图通过删除它来执行其他模型,但似乎没有任何效果。请帮帮我!

更新

我发现这是由于我试图添加的关系造成的,所以我在一个单独的迁移中移动了所有帖子的所有关系:

    'use strict';

module.exports = {
  up: (queryInterface, Sequelize) => {
    return [
        queryInterface.addColumn("Containers", "userId", {
            type: Sequelize.INTEGER,
            references: "Users",
            referenceKey: "id",
            onUpdate: "cascade",
            onDelete: "cascade"
        }),

        queryInterface.addColumn("Containers", "parentContainer", {
            type: Sequelize.INTEGER,
            references: "Containers",
            referenceKey: "id",
            onUpdate: "cascade",
            onDelete: "cascade"
        }),

        queryInterface.addColumn("Entities", "containerId", {
              type: Sequelize.INTEGER,
              references: "Containers",
              referenceKey: "id",
              onUpdate: "cascade",
              onDelete: "cascade",
        }),

        queryInterface.addColumn("Posts", "userId", {
                type: Sequelize.INTEGER,
                references: "Users",
                referenceKey: "id",
                onUpdate: "cascade",
                onDelete: "cascade"
        }),

        queryInterface.addColumn("Posts", "containerId", {
              type: Sequelize.INTEGER,
              references: "Containers",
              referenceKey: "id",
              onUpdate: "cascade",
              onDelete: "cascade",
              nullable: true
        }),

        queryInterface.addColumn("Votes", "userId", {
                type: Sequelize.INTEGER,
                references: "Users",
                referenceKey: "id",
                onUpdate: "cascade",
                onDelete: "cascade"
        }),

        queryInterface.addColumn("Votes", "postId", {
                type: Sequelize.INTEGER,
                references: "Posts",
                referenceKey: "id",
                onUpdate: "cascade",
                onDelete: "cascade"
        }),

        queryInterface.addColumn("Comments", "userId", {
                type: Sequelize.INTEGER,
                references: "Users",
                referenceKey: "id",
                onUpdate: "cascade",
                onDelete: "cascade"
        }),

        queryInterface.addColumn("Comments", "postId", {
                type: Sequelize.INTEGER,
                references: "Posts",
                referenceKey: "id",
                onUpdate: "cascade",
                onDelete: "cascade"
        }),

        queryInterface.addColumn("Comments", "commentId", {
                type: Sequelize.INTEGER,
                references: "Comments",
                referenceKey: "id",
                onUpdate: "cascade",
                onDelete: "cascade"
        }),
    ]
  },

  down: (queryInterface, Sequelize) => {

  }
};

现在,所有表都已创建,但此迁移仍然存在错误。

【问题讨论】:

    标签: node.js foreign-keys sequelize.js associations sequelize-cli


    【解决方案1】:

    我也遇到了同样的错误。

    解决办法:我改

    ...
    
    references: TABLE_NAME,
    referenceKey: COLUMN_NAME
    
    ...
    

    ...
    
    references: {
     model: TABLE_NAME,
     key: COLUMN_NAME
    
    ...
    

    它可以工作

    【讨论】:

    • 不要将references.model 与来自queryInterface.addConstraintreferences.table 混淆。表格选项不适用于 Sequelize 6 中的 queryInterface.createTablequeryInterface.addColumn
    【解决方案2】:

    对我来说,这是因为我的环境变量在执行npx sequelize-cli db:create 时没有被加载。当我设法加载它时(在我的 config.js 文件中加载 dot-env + dot-env cli 确定)它工作正常。

    如果您使用 IDE,您可以爬到未定义的定义。或者只是检查松弛跟踪。

    对我来说,就是那句话:

    at getCreateDatabaseQuery (D:\Code\restaurant_project\website_engine\back_end\node_modules\sequelize-cli\lib\commands\database.js:82:64)
    

    在脚本中引导到该行(ctrl+单击松弛跟踪以转到文件)

    return 'CREATE DATABASE IF NOT EXISTS ' + queryGenerator.quoteIdentifier(config.database)
    

    config.database 未定义,因此出现错误。

    【讨论】:

      猜你喜欢
      • 2016-09-05
      • 2023-03-27
      • 2020-02-09
      • 2018-02-12
      • 2016-01-10
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2015-05-29
      相关资源
      最近更新 更多