[Nest.JS] env 설정 / configModule 사용

jm4293·2024년 3월 20일
0

설치

pnpm add @nestjs/config

app.module.ts 설정 / 전역 설정

  • ConfigModule.forRoot(configModuleConfig) 설정
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { GeocodingModule } from './modules/naver-mpas/geocoding/geocoding.module';
import { ConfigModule } from '@nestjs/config';
import { configModuleConfig, typeormMysqlConfig } from './config';
import { ChattingModule } from './modules/chatting/chatting.module';
import { UsersModule } from './modules/users/users.module';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    ConfigModule.forRoot(configModuleConfig),
    TypeOrmModule.forRootAsync(typeormMysqlConfig),
    GeocodingModule,
    ChattingModule,
    UsersModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

configModuleConfig 설정

  • src/.env.naver-maps 와 src/.env.typeorm-mysql 두 개가 있다
  • 두 개의 env를 불러오기 위하여 envFilePath에 배열을 이용
  • isGlobal을 이용해서 전역 사용
import { ConfigModuleOptions } from '@nestjs/config';

export const configModuleConfig: ConfigModuleOptions = {
  envFilePath: ['.env.naver-maps', '.env.typeorm-mysql'],
  isGlobal: true,
};

env의 변수 불러와서 사용하는 방법

  • 예를들어 service에서 constructor에 configService를 선언한다.
  • 사용할 때는 this.configService.get('NAVER_CLIENT_ID') 이러한 방법으로 configService에서 get을 이용하여 불러와 사용한다.
import { Injectable } from '@nestjs/common';
import axios from 'axios';
import { ConfigService } from '@nestjs/config';

@Injectable()
export class GeocodingService {
  constructor(private configService: ConfigService) {}

  async getGeocoding(searchKeyword: string) {
    return axios
      .get(`https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query=${searchKeyword}`, {
        headers: {
          'X-NCP-APIGW-API-KEY-ID': this.configService.get<string>('NAVER_CLIENT_ID'),
          'X-NCP-APIGW-API-KEY': this.configService.get<string>('NAVER_CLIENT_SECRET'),
        },
      })
      .then((response) => {
        return response.data;
      })
      .catch((error) => {
        console.log('error', error);
      });
  }
}
profile
무언가 만드는 것을 좋아합니다

0개의 댓글

관련 채용 정보