• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

module.ts에서도 process.env 대신 configService를 사용할수 있나요?

23.08.29 16:22 작성 조회수 246

0

이전강의떄 app.module.ts에서 외부에서 Env값을 불러오는 방법도 있다는것을 알려주셧는데

const getEnv = async () => {
  //외부에 저장된 Env값
  // const response = await axios.get("/loadEnv")
  // return response.data;
  return {
    DB_PASSWORD: '~~~',
  };
};

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true, load: [getEnv] }),
    UsersModule,
    ChannelsModule,
    DmsModule,
    WorkspaceModule,
    TypeOrmModule.forRoot({
      type: 'mariadb',
      host: process.env.DB_HOST,
      port: parseInt(process.env.DB_PORT, 10),
      username: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_DATABASE,
      entities: ['entities/*.js'],
      // autoLoadEntities: true, // TypeOrmModule.forFeature 내의 entities를 읽어서 자동 연결
      synchronize: true,
      logging: true,
      keepConnectionAlive: true, //핫리로딩시 연결종료 방지
      charset: 'utf8mb4',
    }),
  ],
  controllers: [AppController],
  providers: [AppService, ConfigService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes('*');
  }
}
@Injectable()
export class AppService {
  constructor(private configService: ConfigService) {}

  getHello() {
    return this.configService.get('PORT');
  }
}

제가 이해한 바에 따르면 app.module.ts 에서 ConfigModule을 임포트하여 app.service.ts에서 ConfigService를 사용하여 외부 env값을 사용할수 있는데

app.module.ts 에서도 자체적으로 외부env를 이용하여 db설정값을 지정할수 있는지 궁금합니다.

답변 1

답변을 작성해보세요.

0

https://docs.nestjs.com/techniques/database#async-configuration

여기서 forRootAsync처럼 configModule import를 지원한다면 factory 함수에서 configService를 불러와서 가능합니다. 모든 모듈이 이걸 지원하는 것은 아니긴 합니다.

최석우님의 프로필

최석우

질문자

2023.08.29

forRoot를 비동기로 지원해 주는 기능이 있었군요!
답변 감사합니다.