Nx NestJs - 환경 변수와 Typeorm 데이터베이스 연결

이전 기사에서 계속해서 정의된 ConfigModule 및 환경 변수가 이미 있어야 합니다.

이 경우 데이터베이스 연결을 설정하려면 몇 줄의 코드만 있으면 됩니다.
내 예에서는 PostgreSQL 데이터베이스를 사용하지만 모든 유형의 데이터베이스가 될 수 있습니다.
  • npm install --save @nestjs/typeorm [email protected] pg를 설치합니다. pg는 Typeorm이 데이터베이스에 연결하는 데 사용하는 Postgresql 드라이버입니다. 개별 데이터베이스마다 다른 드라이버가 됩니다. sql2 , mongoose 및 기타. 우리가 설치한 typeorm은 v0.3입니다. nestJs 문서에서는 v0.2를 사용하는 것이 좋지만 호환 가능하고 최신 버전입니다. 마음에 들지 않으면 v0.2를 사용할 수 있습니다.
  • 프로젝트 폴더에 typeorm 파일이 있는 typeorm.service.ts 폴더를 만듭니다.
  • 파일에 다음을 추가합니다.

  • import { Injectable } from '@nestjs/common';
    import { ConfigService } from '@nestjs/config';
    import { TypeOrmModuleOptions, TypeOrmOptionsFactory } from '@nestjs/typeorm';
    
    import { IEnvironment } from './../environments/env.interface';
    
    @Injectable()
    export class TypeOrmConfigService implements TypeOrmOptionsFactory {
      constructor(private config: ConfigService) {}
    
      public createTypeOrmOptions(): TypeOrmModuleOptions {
        const db = this.config.get<IEnvironment['database']>('database') as IEnvironment['database'];
        const productionMode = this.config.get<IEnvironment['production']>('production') as IEnvironment['production'];
        return {
          type: 'postgres',
          host: db.host,
          port: db.port,
          database: db.database,
          username: db.username,
          password: db.password,
          //   migrations: ['dist/migrations/*.{ts,js}'],
          logger: 'file',
          synchronize: !productionMode, // never use TRUE in production!
          autoLoadEntities: true,
        };
      }
    }
    


    이에 대한 특별 언급:
  • 마이그레이션이 비활성화됩니다. TypeOrm Cli를 사용하여 Nx 및 NestJ 외부에서 관리되기 때문에 다른 기사에서 다시 설명하겠습니다.
  • 비프로덕션 환경에서만 동기화가 설정됨

  • 이제 남은 것은 AppModule에서 이 클래스를 사용하는 것입니다(또는 보다 세분화된 접근 방식을 원할 경우 별도의 DatabaseModule).
  • app.module.ts로 이동하여 가져오기TypeOrmModule.forRootAsync({ useClass: TypeOrmConfigService })를 추가합니다.
    예를 들어 내 app.module.ts는 다음과 같습니다.

  • import { Module } from '@nestjs/common';
    import { ConfigModule } from '@nestjs/config';
    import { TypeOrmModule } from '@nestjs/typeorm';
    
    import { getEnvConfig } from './environments/env-config';
    import { envValidation } from './environments/env-validator';
    import { TypeOrmConfigService } from './typeorm/typeorm.service';
    
    @Module({
      imports: [
        ConfigModule.forRoot({
          load: [getEnvConfig],
          isGlobal: true,
          cache: true,
          validate: envValidation,
        }),
        TypeOrmModule.forRootAsync({ useClass: TypeOrmConfigService })
      ],
      controllers: [],
      providers: [],
    })
    export class AppModule {}
    


    그게 다야, 다음 단계는 모델과 서비스를 만드는 것입니다. 이에 대한 좋은 문서는 here입니다.

    읽어 주셔서 감사합니다!

    좋은 웹페이지 즐겨찾기