Node.js Sequelize:无法删除 [object Array] 的属性“meta”

问题描述 投票:0回答:4

我正在学习 Sequelize.js 框架,它非常棒。但是,当我尝试从迁移文件中的测试表中删除列时,出现此错误:

ERROR: Cannot delete property 'meta' of [object Array]

当我从查询界面使用removeColumn函数时会发生此错误,但我不知道为什么......

我的迁移文件:

'use strict';

const {DataTypes} = require("sequelize");
/** @type {import('sequelize-cli').Migration} */
module.exports = {
  async up (queryInterface, Sequelize) {
    return queryInterface.sequelize.transaction(t => {
      return Promise.all([
        queryInterface.removeColumn('Students', 'bloodStatus', {transaction: t}),
      ]);
    });
  },

  async down (queryInterface, Sequelize) {
    return queryInterface.sequelize.transaction(t => {
      return Promise.all([
        queryInterface.addColumn('Students', 'bloodStatus', {
          type: DataTypes.STRING,
          allowNull: false
        }, {transaction: t}),
      ]);
    });
  }
};

我使用了上面的迁移文件,但出现错误

ERROR: Cannot delete property 'meta' of [object Array]

我阅读了文档并试图找到解决方案,但不幸的是我找不到。

javascript node.js database sequelize.js
4个回答
3
投票

虽然 Chipmaster5 的解决方案有效,但我认为如果您使用的是 mariadb 映像,那么使用 mysql 方言是一个坏主意。具体来说,这个问题似乎是由 mariadb 包的 v3 引入的,恢复到 2.x 为我解决了这个问题。


2
投票

我找到了解决方案!我在 docker 容器(10.11.2-MariaDB-1:10.11.2+maria~ubu2204 - mariadb.org 二进制发行版)中使用 MariaDB,并且 config.json 中的方言设置为 mariadb,如下面的代码示例所示:

{
  "development": {
    "username": "christian_cornwall",
    "password": "hogwarts",
    "database": "hogwarts_sequelize",
    "host": "172.17.0.3",
    "dialect": "mariadb"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mariadb"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mariadb"
  }
}

将方言设置更改为 mysql 后(如果您没有安装该软件包,它会要求您通过 npm 安装 mysql2),错误消失了,removeColumn 功能开始工作。我希望这会对某人有所帮助!


2
投票

我收到此错误:

% node migrate.js
Running migrations...
{ event: 'migrating', name: '20230628090200-drop-column-id.js' }
Dropping column memberServiceId from table member_service_node
/myproject/node_modules/umzug/lib/umzug.js:151
                    throw new MigrationError({ direction: 'up', ...params }, e);
                          ^
MigrationError: Migration 20230628090200-drop-column-id.js (up) failed: Original error: Cannot delete property 'meta' of [object Array]
    at /myproject/node_modules/umzug/lib/umzug.js:151:27
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Umzug.runCommand (/myproject/node_modules/umzug/lib/umzug.js:107:20)
    at async file:///myproject/data/migrate.js:105:3 {
  cause: TypeError: Cannot delete property 'meta' of [object Array]
      at Query.formatResults (/myproject/node_modules/sequelize/lib/dialects/mariadb/query.js:110:7)
      at Query.run (/myproject/node_modules/sequelize/lib/dialects/mariadb/query.js:73:17)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
      at async /myproject/node_modules/sequelize/lib/sequelize.js:315:16
      at async MySQLQueryInterface.removeColumn (/myproject/node_modules/sequelize/lib/dialects/mysql/query-interface.js:27:23)

直到支持 mariadb@3

npm install mariadb@2 --save

...为我解决了问题


0
投票

在我的例子中,我通过使用原始查询(

queryInterface.sequelize.query([raw query]
)而不是“removeColumn”抽象来解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.