我想在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);
}
}
答案 0 :(得分:0)
正如@zenbeni在评论中提到的那样,不建议从服务器代码运行迁移,因为迁移应始终是不变的并可以重播。
因此,我将更改设计以免从服务器代码进行迁移。
答案 1 :(得分:0)
对于出于测试目的而希望运行迁移的用户: 不在生产环境中。
`
import {
createConnection,
ConnectionOptions,
Connection,
} from 'typeorm';
import { YourEntity } from 'path/to/your/entity.ts';
const testConfig: ConnectionOptions = {
type: 'mongodb',
url: 'mongodb://localhost:27017',
database: 'test',
useUnifiedTopology: true,
entities: [YourEntity],
synchronize: true,
migrations: ['migrations/*YourMigrations.ts'],
};
let connection: Connection;
connection = await createConnection({ ...testConfig });
await connection.synchronize(true);
await connection.runMigrations({
transaction: 'all',
});
//使用:
node -r ts-node / register ./path/to/migrations.ts
//或
节点./path/to/compiled/migrations.js
`