【问题标题】:Generating migration file for a project using NestJS and TypeORM使用 NestJS 和 TypeORM 为项目生成迁移文件
【发布时间】:2020-12-30 02:01:21
【问题描述】:

我正在尝试为我的实体生成迁移文件,但是每当我运行创建实体的命令时,它都会创建一个“空”文件,只创建 up 和 down 方法。

我在我的 package.json 文件中添加了这个脚本:"typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js"

在我的 app.module.ts 中,连接配置如下:

 TypeOrmModule.forRoot({
      type: 'mysql',
      host: database().host,
      port: parseInt(database().port),
      username: database().username,
      password: database().password,
      database: database().schema,
      entities: [Question, QuestionOption],
      migrations: ['src/migration/*{.ts,.js}'],
      cli: {
        migrationsDir: 'src/migration'
      },
      synchronize: true,
    })

database() 是一个 Nestjs 配置文件,并从 .env 文件中获取值。

我用来创建迁移的脚本是:npm run typeorm migration:create -- -n QuestionTables -d src/migrations这里需要指定-d,否则不会创建迁移文件(即使是在forRoot 方法。

是否需要手动编写 SQL 来创建表?

如果我需要向现有表添加新列,我应该创建一个新的迁移文件并手动编写 SQL 代码来添加它吗?

我尝试运行的另一个命令是:npm run typeorm migration:generate -- -n QuestionTables -d src/migrations,它给了我一个错误:“错误:在任何 orm 配置文件中找不到连接选项。”

【问题讨论】:

    标签: typescript nestjs typeorm


    【解决方案1】:

    npm run typeorm migration:create 命令会生成空的迁移文件。

    迁移自动生成的命令是:npm run typeorm migration:generate

    如您收到的错误中所述,您需要指定 cli 的配置文件。这意味着应该将传递给forRoot 的配置提取到 ts/json 文件中。为此,您需要 2 个文件,1 个用于服务器连接,另一个用于迁移配置。

    例如:

    // ormconfig.ts
    export const config: TypeOrmModuleOptions = {
          type: 'mysql',
          host: database().host,
          port: parseInt(database().port),
          username: database().username,
          password: database().password,
          database: database().schema,
          entities: [Question, QuestionOption], // maybe you should also consider chage it to something like:  [__dirname + '/**/*.entity.ts', __dirname + '/src/**/*.entity.js']
          migrations: ['src/migration/*{.ts,.js}'],
          cli: {
            migrationsDir: 'src/migration'
          },
          synchronize: true,
        }
    
    
    // ormconfig-migrations.ts
    
    import {config} from './ormconfig';
    
    export = config;
    
    
    import {config} from './ormconfig';
    
    TypeOrmModule.forRoot(config);
    
    // package.json
    
    "scripts": {
         ...
         "typeorm:cli": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli -f ./ormconfig-migrations.ts",
         "migration-generate": "npm run typeorm:cli -- migration:generate -n"
    }
    

    【讨论】:

    • 好的,所以现在如果我运行命令 npm run migration-generate Test,它会说没有发现数据库模式的更改 - 无法生成迁移。我是否需要创建迁移并在其中手动编写 SQL 代码来创建表?
    • 您是否已经创建了任何表?如果是这样,请清除架构,删除表或删除架构并重新创建它,然后运行迁移生成。此错误表示您的数据库已经有与项目中的实体匹配的表。
    • 还没有,我的数据库是空的。
    • 迁移表中有迁移吗?
    • 我从数据库中删除了所有内容,那里只有一个没有任何表的数据库。如果我运行 npm run migration-generate,我会收到一条消息,说没有发现数据库模式的更改。如果我运行迁移创建,它会在迁移文件夹中创建一个文件,但 up 和 down 方法为空。它应该使用一些 SQL 代码创建迁移文件还是我需要编写该 SQL 代码?
    猜你喜欢
    • 2021-12-05
    • 2019-11-17
    • 2020-08-26
    • 1970-01-01
    • 2022-07-13
    • 2022-11-14
    • 2020-12-14
    • 2022-07-24
    • 2022-09-24
    相关资源
    最近更新 更多