【发布时间】:2019-10-30 05:42:07
【问题描述】:
我想在 MySQL 中创建新表并在应用程序在生产模式下运行时自动运行 TypeORM 迁移。
注意:这个新表不是在生产模式下启动应用程序之前创建的。
根据Migration Documentation,需要使用typeorm migration:run命令来运行迁移。
由于我的新表仅在应用程序调用 CreateNewTableTimeStamp(inputTableName).up 时创建,此时它将触发在我的数据库中创建新表。
但我没有找到如何自动执行此迁移的解决方案,因为每次应用程序调用此方法创建新表时,我都无法手动运行 typeorm migration:run。
这个表建好之后,我会往这个新表中写入新的数据。
有人可以帮忙解决这个问题吗?
谢谢。
我的新表格代码:
class CreateNewTableTimeStamp implements MigrationInterface {
tableName: string;
constructor (inputTableName: string) {
this.tableName = inputTableName
}
async up(queryRunner: QueryRunner): Promise<any> {
await queryRunner.createTable(new Table({
name: this.tableName,
columns: [
{
name: "id",
type: "int",
isPrimary: true
},
{
name: "email",
type: "varchar",
}
]
}), true)
}
async down(queryRunner: QueryRunner): Promise<any> {
const table = await queryRunner.getTable(this.tableName);
await queryRunner.dropTable(this.tableName);
}
}
【问题讨论】:
-
我不建议从您的服务器代码运行迁移,它应该在使用 CLI 命令启动您的节点服务器之前完成。随着代码的发展,最好不要在代码和 SQL 迁移结构之间带来硬依赖,并且迁移应该始终是不可变的和重放的。我鼓励您生成原始 SQL 查询,这样就不会执行“代码”(想象一下 TypeOrm 改变了执行 queryRunner 的方式,您的迁移可能会根据 TypeOrm 的版本变得可变!)。
-
@zenbeni,感谢您的建议。将更改我的设计,不再从我的服务器代码进行迁移。
标签: mysql node.js express typeorm