一个迁移文件中的多个迁移语句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个迁移文件中的多个迁移语句相关的知识,希望对你有一定的参考价值。
我试图在单个迁移文件中执行多个迁移语句,以便一次更改同一个表的多个列。
我想知道我是否以写入方式进行,或者是否有更好,更合适的方法:
Migration Code
module.exports = {
up: function(queryInterface, Sequelize, done) {
queryInterface.changeColumn('users', 'name', {
type: Sequelize.STRING,
allowNull: false,
require: true,
unique: true
}).success(function() {
queryInterface.changeColumn('users', 'address', {
type: Sequelize.STRING,
allowNull: false,
require: true,
unique: true
}).success(function() {
queryInterface.changeColumn('users', 'city', {
type: Sequelize.STRING,
allowNull: false,
require: true,
unique: true
}).success(function() {
queryInterface.changeColumn('users', 'state', {
type: Sequelize.STRING,
allowNull: false,
require: true,
defaultValue: "ncjnbcb"
});
done();
});
});
});
}
};
但是我面临一个错误:
TypeError:undefined不是函数
由于我在迁移中找不到任何调试错误的方法,如果有人帮助我解决它或者如果可能的话,告诉我们如何找出迁移中的错误的方式将会很棒。
答案
你的TypeError可能是因为你没有返回任何东西。 docs说每个迁移函数都应该返回一个Promise。没有提到done
回调。
为此,请尝试以下方法:
return Promise.all([
queryInterface.changeColumn...,
queryInterface.changeColumn...
]);
另一答案
module.exports = {
up: async (queryInterface, Sequelize) => {
try {
await queryInterface.addColumn('User', 'name', {
type: Sequelize.STRING
});
await queryInterface.addColumn('User', 'nickname', {
type: Sequelize.STRING
});
return Promise.resolve();
} catch (e) {
return Promise.reject(e);
}
},
down: async (queryInterface, Sequelize) => {
try {
await queryInterface.removeColumn('Challenges', 'name');
await queryInterface.removeColumn('Challenges', 'nickname');
return Promise.resolve();
} catch (e) {
return Promise.reject(e);
}
}
};
以上是关于一个迁移文件中的多个迁移语句的主要内容,如果未能解决你的问题,请参考以下文章
运行nestjs应用程序时typeorm迁移中的“不能在模块外使用import语句”