Sequelize迁移移除列时遇'Cannot delete property 'meta' of [object Array]'错误求助
Sequelize迁移removeColumn报错:Cannot delete property 'meta' of [object Array] 排查方案
以下是针对该错误的排查和解决步骤:
可能原因与解决方法
1. 版本兼容性问题
Sequelize核心库与sequelize-cli版本不匹配是常见诱因。执行以下命令查看版本:
npm list sequelize sequelize-cli
确保两者主版本一致(如均为v6或v7),若版本差异过大,升级或降级至兼容版本。
2. 事务写法冗余触发内部错误
你的代码中仅执行单个列操作,无需用Promise.all包裹,冗余的数组结构可能触发内部逻辑错误。简化事务代码:
'use strict'; const { DataTypes } = require("sequelize"); /** @type {import('sequelize-cli').Migration} */ module.exports = { async up (queryInterface, Sequelize) { return queryInterface.sequelize.transaction(async t => { await queryInterface.removeColumn('Students', 'bloodStatus', { transaction: t }); }); }, async down (queryInterface, Sequelize) { return queryInterface.sequelize.transaction(async t => { await queryInterface.addColumn('Students', 'bloodStatus', { type: DataTypes.STRING, allowNull: false }, { transaction: t }); }); } };
3. 验证目标列存在性
确认Students表中确实存在bloodStatus列,可通过数据库客户端执行查询验证:
-- MySQL示例 DESCRIBE Students; -- PostgreSQL示例 SELECT column_name FROM information_schema.columns WHERE table_name = 'Students';
若列不存在,需先确认表结构后再执行迁移。
4. 临时禁用事务测试
若上述方法无效,可临时移除事务逻辑,直接执行列操作,判断是否为事务相关问题:
async up (queryInterface, Sequelize) { return queryInterface.removeColumn('Students', 'bloodStatus'); }
若此方式执行成功,说明事务参数传递或版本兼容存在问题,需重点排查版本匹配度。
内容的提问来源于stack exchange,提问作者Chipmaster5
相关产品推荐
相关产品推荐

