迁移已添加到根文件夹而不是迁移文件夹

时间:2018-11-08 12:24:49

标签: nestjs typeorm

我正在尝试为Nestjs TypeORM设置迁移,在我的TypeOrmModule.forRoot()中,我已添加了用于迁移的所需文件夹,但仍将迁移添加到根文件夹中。

TypeOrmModule.forRoot({
  type: 'mssql',
  host: 'test',
  port: 1,
  username: 'test',
  password: 'test',
  database: 'test',
  entities: [__dirname + '/**/entities/*{.ts,.js}'],
  synchronize: false,
  options: {
    useUTC: true,
  },
  migrations: [__dirname + '/**/migration/*.ts'],
  cli: {
    migrationsDir: __dirname + '/**/migration',
  },
})

4 个答案:

答案 0 :(得分:1)

我认为这可能是由于在创建迁移时可能正在使用typeorm软件包对吗? (例如group_by(!! GroupVar2) )。它将使用与您在嵌套应用程序中指定的配置完全不同的配置。我想最简单的方法是创建一个环境文件并使用typeorm migration:create -n PostRefactoring来定义您的迁移目录。

有关可用的环境选项http://typeorm.io/#/using-ormconfig/using-environment-variables,请参见此处。然后,您可以将环境与应用程序链接起来,以便在一处定义它们。

我不想成为一个广告自己包装的人,如果愿意,您可以轻松实现自己的设置。我构建了一个配置模块,您可以将其用于像这样的typeorm配置

https://github.com/nestjs-community/nestjs-config#typeorm

TYPEORM_MIGRATION_DIR

这将允许您在这样的文件中定义配置

import {Module} from '@nestjs/common';
import {ConfigModule, ConfigService} from 'nestjs-config';
import {TypeOrmModule} from '@nestjs/typeorm';
import * as path from 'path';

@Module({
    imports: [
        ConfigModule.load(path.resolve(__dirname, 'config/**/*.{ts,js}')),
        TypeOrmModule.forRootAsync({
            useFactory: (config: ConfigService) => config.get('database'),
            inject: [ConfigService],
        }),
    ],
})
export class AppModule {}

然后输入.env

//src/config/database.ts
export default {
    type: 'mssql',
    host: process.env.TYPEORM_HOST,
    port: process.env.TYPEORM_PORT,
    username: process.env.TYPEORM_USERNAME,
    password: process.env.TYPEORM_PASSWORD,
    database: process.env.TYPEORM_DATABASE,
    entities: [process.env.TYPEORM_ENTITIES],
    synchronize: process.env.TYPEORM_SYNCHRONIZE == 'true',
    migrationsDir: process.env.TYPEORM_MIGRATIONS_DIR
};

现在,您将可以使用TYPEORM_HOST=test TYPEORM_USERNAME=test TYPEORM_PASSWORD=test TYPEORM_PORT=1 TYPEORM_MIGRATIONS_DIR=src/migrations 命令,并且仍然可以在一个位置定义数据库配置。希望这可以帮助!

答案 1 :(得分:1)

只分享我的经验。 我有打字机0.2.12

  1. 我已经按照here

  2. 的说明配置了typeorm脚本
  3. 创建的ormconfig.ts导出配置:export = config;(完全)

  4. 仅在__dirname

    中设置不带有src/migrations的migrationsDir

对我有用。

答案 2 :(得分:0)

我遇到了同样的问题,对我来说,问题是连接名称。我的连接配置未使用“默认”作为名称,因此我们需要将其名称传递给typeorm cli,如下所示:

typeorm migration:create -n MyMigration -c my-connection-name

答案 3 :(得分:-1)

CLI 命令看不到(并且对导出的名称 typeOrmConfig 一无所知,因此,如果有的话,它使用默认的导出配置)。因此,为了使其工作,默认情况下应该导出配置。但是因为 export default 是一种不好的模式,所以我很少使用它。

我的例子:

  // typeorm.config.ts file

  // Old code
  export const typeOrmConfig: TypeOrmModuleOptions = {
    type: 'postgres',
    host: 'localhost' || process.env.DB_HOST,
    ...
  }

  // New code, make config visible for CLI commands
  module.exports = typeOrmConfig;