[NestJS] Configuration

woogiemon·2023년 3월 8일
0
post-thumbnail

설치

yarn add @nestjs/config
  • The @nestjs/config package internally uses dotenv.

먼저 AppModule 에 이런식으로 작성한다.

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

@Module({
  imports: [ConfigModule.forRoot()],
})
export class AppModule {}

forRoot() 안의 인자인 ConfigModuleOptions 에는 다양한 옵션이 있다.

import { ConfigFactory } from './config-factory.interface';
import { DotenvExpandOptions } from 'dotenv-expand';
export interface ConfigModuleOptions {
    cache?: boolean;
    isGlobal?: boolean;
    ignoreEnvFile?: boolean;
    ignoreEnvVars?: boolean;
    envFilePath?: string | string[];
    encoding?: string;
    validate?: (config: Record<string, any>) => Record<string, any>;
    validationSchema?: any;
    validationOptions?: Record<string, any>;
    load?: Array<ConfigFactory>;
    expandVariables?: boolean | DotenvExpandOptions;
}

많이 쓰는 옵션만 알아보자.

ConfigModule.forRoot({
  envFilePath: '.development.env',
});

: env 파일의 경로를 추적하기 위해 사용한다.


ConfigModule.forRoot({
  envFilePath: ['.env.development.local', '.env.development'],
});

: 이런 식으로 여러 파일을 불러올 수도 있다.


ConfigModule.forRoot({
  ignoreEnvFile: true,
});

: env 파일을 사용하고 싶지 않을 때 사용한다.


ConfigModule.forRoot({
  isGlobal: true,
});

다른 곳에서도 환경 변수를 불러올 수 있도록 전역으로 설정하기 위해 사용한다.


사용방법

.env.develpment 파일에 여러 환경변수를 적어놓는다.

NODE_ENV='development'
JWT_SECRET='secret'
JWT_EXPIRATION_TIME='60'

app.module.ts

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      cache: true,
      envFilePath: [`.env.${process.env.NODE_ENV}`, `env`],
      validate,
      ...
}),
// env-cmd 설치
yarn add env-cmd

package.json

"scripts": {
    ...
    "start:dev": "env-cmd -f .env.development nest start --watch",
    ...
  },

env-cmd 는 각 환경에 맞게 자동으로 환경변수를 불러와 적용할 수 있도록 도와주는 패키지다.


이런식으로 사용한다.

@Injectable()
export class AuthService {
  constructor(
    ...
    private readonly configService: ConfigService,
  ) {}
  
  public async register(request: RegisterRequest) {
  ...
    const accessToken = await this.jwtService.signAsync(
        instanceToPlain(createdUser),
        {
          secret: this.configService.get<string>('JWT_SECRET'),
        },
      );
	}
}
profile
삽질 기록..

0개의 댓글