使用异步数据源Typeorm+Nestjs进行迁移

问题描述 投票:0回答:2

我想知道是否有人知道如何在 NestJS 环境上使用来自 TypeORM 的异步数据源生成和运行迁移。

我的意思是

async DataSource
是数据库连接的值是动态获取的(从秘密管理器提供商)。

这里有一个包含此信息的 PR,但是,将此“概念”合并到 NestJS 中的最佳实践是什么?我需要创建两个单独的数据源配置吗?一个用于嵌套,一个用于迁移?。 我的项目像这样运行

TypeOrmModule

(并且在启动嵌套时按预期工作):

TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => {
        await configService.setDBCredentials();
        return {
          type: TRANSACTIONAL_DATABASE_TYPE,
          host: configService.transactionalDatabaseCredentials.DATABASE_HOST,
          port: configService.transactionalDatabaseCredentials.DATABASE_PORT,
          username: configService.transactionalDatabaseCredentials.DATABASE_USER,
          password: configService.transactionalDatabaseCredentials.DATABASE_PASSWORD,
          database: configService.transactionalDatabaseCredentials.DATABASES_NAME,
          entities: [Member]
        }
      },
      inject: [ConfigService],
    }),


nestjs typeorm node.js-typeorm
2个回答
1
投票
此处

更新,特别是由 DanielMaranhao 更新。 就我个人而言,我仍然使用 2 个数据源(一个用于迁移,一个用于 Nest 配置) 除了您显示的配置之外,我还在 src/database 文件夹中创建了名为“data-source.ts”的文件

// src/database/data-source.ts import * as dotenv from 'dotenv'; import * as dotenvExpand from 'dotenv-expand'; import { DataSource } from 'typeorm'; dotenvExpand.expand(dotenv.config()); export default new DataSource({ 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_NAME, entities: ['dist/**/*.entity.js'], migrations: ['dist/database/migrations/*.js'], extra: { charset: 'utf8mb4_unicode_ci', }, });

生成

迁移: yarn run typeorm migration:generate -d dist/database/data-source -p src/database/migrations/[aNameForYourMigration]

不要忘记更改 
[aNameForYourMigration]

按您想要的内容

运行

您的迁移: yarn run typeorm migration:run -d dist/database/data-source



0
投票
ormconfig.ts

文件,然后使用迁移命令。根据您的应用程序的需要调整您的 AppModule 导入路径。

import { NestFactory } from '@nestjs/core';
import { AppModule } from './src/app/app.module';
import { DataSource } from 'typeorm';

export default NestFactory.create(AppModule)
  .then((app) => app.get(DataSource))
  .then((dataSource) => Promise.all([dataSource, dataSource.destroy()]))
  .then(([dataSource]) => dataSource);

© www.soinside.com 2019 - 2024. All rights reserved.