我正在尝试为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',
},
})
答案 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
我已经按照here
创建的ormconfig.ts导出配置:export = config;
(完全)
仅在__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;