生成迁移看不到我的连接

时间:2020-09-13 09:50:29

标签: migration nestjs typeorm

我将与数据库的连接设为一个单独的模块

@Module({
    imports: [
        TypeOrmModule.forRootAsync({
            imports: [ConfigModule],
            inject: [ConfigService],
            useFactory: configService => ({
                type: configService.get('DATABASE_TYPE'),
                host: configService.get('DATABASE_HOST'),
                port: configService.get('DATABASE_PORT'),
                username: configService.get('DATABASE_USERNAME'),
                password: configService.get('DATABASE_PASSWORD'),
                database: configService.get('DATABASE_NAME'),
                entities: ['./dist/**/*.entity.{js,ts}'],
                synchronize: false,
                migrationsRun: true,
                logging: true,
                migrations: ['./dist/modules/database/migration/*.{js,ts}'],
                cli: {
                    migrationsDir: 'src/modules/database/migration',
                },
            }),
        }),
    ],
})
export class DatabaseModule {}

这在docker容器中工作正常。但是,当我要运行迁移的创建时,会出现错误

Error: No connection options were found in any orm configuration files.
    at ConnectionOptionsReader.<anonymous> (/Users/user1/Documents/app/src/connection/ConnectionOptionsReader.ts:43:19)

我的用于迁移的命令

        "migration:generate": "ts-node node_modules/.bin/typeorm migration:generate -n",
        "migration:run": "ts-node node_modules/.bin/typeorm migration:run",
        "migration:revert": "ts-node node_modules/.bin/typeorm migration:revert"

在命令中,我没有指定连接konyig,并且据我所知orm无法找到该连接的配置,我该如何告诉我?

1 个答案:

答案 0 :(得分:1)

问题是TypeORM的CLI不知道您的Nest应用程序中使用TypeormModule来配置连接。 CLI希望以documentation中所述的以下格式之一进行配置。

因此,解决问题的最简单方法是创建一个名为ormconfig.js的文件,并在此处设置连接配置。像这样:

module.exports = {
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "test",
  "password": "test",
  "database": "test"
}

假设您的configService从环境变量中读取值,您还可以执行以下操作:

module.exports = {
  "type": "mysql",
  "host": process.env.DB_HOST,
  "port": process.env.DB_PORT,
  "username": process.env.DB_USERNAME,
  "password": process.env.DB_PASSWORD,
  "database": process.env.DB_DATABASE
}

因此配置与应用程序中的配置相同。