TypeORM:尝试手动运行迁移时出现“无迁移待处理”

时间:2020-07-09 19:07:34

标签: mysql nestjs typeorm

我有一个新的Web应用程序,并且编写了一个迁移器来创建用户表。但是,无论我如何尝试,typeorm似乎都找不到该迁移器,因此不会运行它。

我的文件结构(未显示其他文件/文件夹):

├── Server
│   ├── dist
|   |   ├── Migrations
|   |   |   ├── 1234567891234567890-AddUserTable.js
|   |   |   ├── 1234567891234567890-AddUserTable.js.map
|   |   |   ├── 1234567891234567890-AddUserTable.d.ts
│   ├── src
|   |   ├── Migrations
|   |   |   ├── 1234567891234567890-AddUserTable.ts
|   |   ├── app.module.ts

app.module.ts

@Module({
    imports: [
        ConfigModule.forRoot({ envFilePath: '.env' }),
        TypeOrmModule.forRootAsync({
            imports: [ConfigModule],
            useFactory: (configService: ConfigService) => ({
                type: 'mysql',
                host: configService.get('TYPEORM_HOST'),
                port: +configService.get<number>('TYPEORM_PORT'),
                username: configService.get('TYPEORM_USERNAME'),
                password: configService.get('TYPEORM_PASSWORD'),
                database: configService.get('TYPEORM_DATABASE'),
                synchronize: configService.get('TYPEORM_SYNCHRONIZE'),
                entities: [__dirname + '/**/*.entity{.ts,.js}'],
                migrations: [__dirname + '/Migrations/**/*.js'],
                migrationsRun: false,
                cli: {
                    migrationsDir: './Migrations',
                },
            }),
            inject: [ConfigService],
        }),
    ],
    controllers: [],
    providers: [],
})
export class AppModule {
    constructor(private connection: Connection) {}
}

要运行此命令,请在控制台窗口中键入:nest start,以启动我的服务器。

然后,我运行npx typeorm migration:run,我得到了:

query: SELECT * FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'myDB' AND `TABLE_NAME` = 'migrations'
query: SELECT * FROM `myDB`.`migrations` `migrations` ORDER BY `id` DESC
No migrations are pending

如果我查看数据库,会看到一个migrations表,里面没有条目。

我试图删除我的迁移器文件,并使用最近的时间戳重新创建它,但这也不起作用。

npx typeorm migration:create -n "MyMigratorName"

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:4)

对于任何来这里寻求帮助的人:

上面的配置提到了可以在js文件中找到的迁移:

migrations: [__dirname + '/Migrations/**/*.js'],

但是从文件夹结构中可以清楚地看出,迁移是在ts文件而不是js中编写的。

要从ts运行迁移,请遵循此处介绍的官方推荐方法:

https://github.com/typeorm/typeorm/blob/master/docs/using-cli.md#if-entities-files-are-in-typescript

在这种情况下,请不要忘记将迁移blob更新为ts:

migrations: [__dirname + '/Migrations/**/*.ts'],

如果要从js文件运行迁移,则必须在将ts文件编译为js格式后提供从dist文件夹获取的位置。