首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TypeORM/带有“`useFactory`”的运行中的迁移

TypeORM/带有“`useFactory`”的运行中的迁移
EN

Stack Overflow用户
提问于 2022-06-22 19:45:05
回答 1查看 1.9K关注 0票数 2

我在nestjs中使用了包含以下配置的app.module.ts应用程序:

代码语言:javascript
运行
复制
import { ConfigModule, ConfigService } from '@nestjs/config';
import {
  TypeOrmModuleAsyncOptions,
  TypeOrmModuleOptions,
} from '@nestjs/typeorm';
import { DataSource } from 'typeorm';  

export const typeOrmAsyncConfig: TypeOrmModuleAsyncOptions = {
  imports: [ConfigModule],
  inject: [ConfigService],
  name: 'nameA',
  useFactory: (configService: ConfigService) => ({
    type: 'postgres',
    host: configService.get('DB_HOST'),
    port: parseInt(configService.get('DB_PORT') || '5432'),
    username: configService.get('DB_USER'),
    password: configService.get('DB_PASSWORD'),
    database: configService.get('DB_NAME'),
    entities: [__dirname + './../**/*.entity{.ts,.js}'],
    migrations: [__dirname + '/../database/migrations/*{.ts,.js}'],
    synchronize: false,
    cli: {
      entitiesDir: __dirname + './../**/*.entity{.ts,.js}',
    },
    ssl: configService.get('DB_SSL') === 'true',
  }),
};

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    TypeOrmModule.forRootAsync(typeOrmAsyncConfig),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

我已经全局安装了typeorm,并在上面指定的路径中生成了迁移文件,但是,我得到了一个dataSource未找到的错误:

$> typeorm migration:run

产出:

代码语言:javascript
运行
复制
Runs all pending migrations.

Options:
  -h, --help         Show help                                         [boolean]
  -d, --dataSource   Path to the file where your DataSource instance is defined.
                                                                      [required]
  -t, --transaction  Indicates if transaction should be used or not for
                     migration run. Enabled by default.     [default: "default"]
  -v, --version      Show version number                               [boolean]

Missing required argument: dataSource

我不知道如何做的是,当我在app.module.ts中使用useFactory并解决这个问题时,如何导出数据源?

EN

回答 1

Stack Overflow用户

发布于 2022-06-23 07:05:04

由于typeorm orm0.3.xcli需要数据源,因此不再支持ormconfig.json。另外,cli命令也发生了变化。您可以为nestjs和typeorm定义单独的配置。

代码语言:javascript
运行
复制
// src/config/database-config.ts
import 'dotenv/config';
import { DataSourceOptions } from 'typeorm';

const databaseConfig: DataSourceOptions = {
  name: 'default',
  type: 'better-sqlite3',
  database: process.env.DB_NAME,
  entities: [__dirname + '/../entities/*.entity.ts'],
  migrations: [__dirname + '/../migrations/*{.ts,.js}'],
  synchronize: false,
  logging: true,
  migrationsRun: true
};

export default databaseConfig;

然后用打字机

代码语言:javascript
运行
复制
// src/config/data-source.ts
import { DataSource } from 'typeorm';
import databaseConfig from './database-config';

export const AppDataSource = new DataSource(databaseConfig);

对于nestjs应用程序模块

代码语言:javascript
运行
复制
// src/config/typeorm-config.ts
// like so: TypeOrmModule.forRootAsync(typeOrmAsyncConfig)

import { ConfigModule, ConfigService } from '@nestjs/config';
import {
  TypeOrmModuleAsyncOptions,
  TypeOrmModuleOptions,
} from '@nestjs/typeorm';
import databaseConfig from './database-config';

export const typeOrmConfig: TypeOrmModuleOptions = databaseConfig;

export const typeOrmAsyncConfig: TypeOrmModuleAsyncOptions = {
  imports: [ConfigModule],
  inject: [ConfigService],
  useFactory: async (): Promise<TypeOrmModuleOptions> => {
    return databaseConfig;
  },
};

package.json脚本(需要时更改纱线运行)

代码语言:javascript
运行
复制
{
"typeorm:cli": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli -d src/config/data-source.ts",
"migration:generate": "yarn run typeorm:cli migration:generate",
"migration:create": "yarn run typeorm:cli migration:create",
"migration:run": "yarn run typeorm:cli migration:run",
"migration:revert": "yarn run typeorm:cli migration:revert"
}

例如,如果您需要生成一个新的迁移,那么终端需要完整的路径。

代码语言:javascript
运行
复制
yarn run migration:generate src/migrations/newMigrationName
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72721207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档