저장을 습관화

NestJS - .env 본문

공부/node.js

NestJS - .env

ctrs 2023. 10. 1. 01:33

express.js 에서는 .nev을 사용하려면 dotenv를 설치해야 하지만

NestJS에서는 @nestjs/config에 포함되어 있다.

// .env 사용을 위한 nestjs config 설치
$ npm install @nestjs/config

 

 

- app.module.ts

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [ConfigModule.forRoot({ isGlobal: true })],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

imports에 ConfigModule.forRoot 추가

isGlobal은 모든 모듈에 동일하게 적용할 것이냐는 의미이니 그때그때 상황봐서 설정

 

어플리케이션의 루트디렉토리에 .env 파일을 생성하고, 

필요한 내용을 입력한다

 

.env의 내용을 가져올 파일에선

process.env.(옵션이름) 이라고 입력한다

import는 필요없다

 

 

[추가 - 2023.11.04]

타입스크립트를 사용할 때, .env의 내용을 불러오는 곳이 class라면,

모든 class는 constructor(생성자)를 가지는데 여기서 configService를 사용하는 방법도 있다.

 

- app.module.ts 설정 추가

import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [ConfigModule.forRoot({ isGlobal: true })],
  controllers: [AppController],
  providers: [AppService, ConfigService],
})
export class AppModule {}

 

providers에 ConfigService 추가하고

 

 

.env의 내용이 아래와 같을때

SECRET="ConfigService로 .env의 내용을 불러오는 테스트 중입니다."
PORT=3030

 

 

이 내용을 불러오는 곳(이번 예시에서는 app.service.ts)에서 아래와 같이 작성해주면

import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';

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

  getHello(): string {
    return this.configService.get('SECRET');
  }
}

 

 

.env의 내용을 잘 가져오는 것을 확인할 수 있다.

 

 

반드시 이렇게 사용해야하는 것은 아니고

process.env.(옵션), this.configService.get(옵션) 두가지 다 사용법을 알아두자