인프런 커뮤니티 질문&답변

최석우님의 프로필 이미지
최석우

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

typeorm 커넥션 맺기

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

해결된 질문

작성

·

309

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를 불러와서 가능합니다. 모든 모듈이 이걸 지원하는 것은 아니긴 합니다.

최석우님의 프로필 이미지
최석우
질문자

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

최석우님의 프로필 이미지
최석우

작성한 질문수

질문하기