簡體   English   中英

使用異步數據源 Typeorm+Nestjs 進行遷移

[英]Migrations with async DataSource Typeorm+Nestjs

我想知道是否有人知道如何在 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],
    }),

該問題的 Github 鏈接已在此處更新,特別是 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM