TypeORM-如何创建新表并在生产模式下自动运行迁移?

时间:2019-06-16 09:25:08

标签: mysql node.js express typeorm

我想在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);
  }
}

2 个答案:

答案 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

`