티스토리 뷰

반응형

[nestjs] 4. nestjs환경에서 설정파일 config로 빼기(Joi, config)

cross-env와 joi를 활용하여 기존 설정파일을 외부로 빼었다.

 

[cross-env]

os에 종속되지 않고, 플랫폼 표준화를 하기위해 필요한 라이브러리

 

[joi]

형식에 대한 유효성 검사를 한다.

 

[@nestjs/config]

설정 파일을 외부에서 가져오기 위한 nestjs에서 제공되는 모듈

 

[설치]

$ npm install @nestjs/config cross-env Joi

 

[구현]

.env.dev 파일과 .env.prod 파일을 생성하여 외부 config파일을 추가하여 데이터베이스 설정을 개발환경과 배포환경으로 분리하였다. 또한 TypeORM의 자동 생성은 안정성을 위하여 개발환경에서만 진행하게하였다.

 

[app.module.ts]

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { TestModule } from './test/test.module';
import { Photo } from './test/entities/photo.entity';
import { ConfigModule } from '@nestjs/config';
import * as Joi from 'joi';

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: process.env.NODE_ENV === 'dev' ? '.env.dev' : '.env.test',
      ignoreEnvFile: process.env.NODE_ENV === 'prod',
      validationSchema: Joi.object({
        NODE_ENV: Joi.string().valid('dev', 'prod').required(),
        DB_HOST: Joi.string().required(),
        DB_PORT: Joi.string().required(),
        DB_USERNAME: Joi.string().required(),
        DB_PASSWORD: Joi.string().required(),
        DB_NAME: Joi.string().required(),
      }),
    }),
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: process.env.DB_HOST,
      port: +process.env.DB_PORT,
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      synchronize: process.env.NODE_ENV !== 'prod',
      logging: true,
      entities: [Photo],
    }),
    TestModule,
  ],
})
export class AppModule {}

[.env.dev]

DB_HOST=127.0.0.1
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=1
DB_NAME=testApi

자세한 내용은 commit history를 통하여 확인이 가능하다.

 

[github commit]

https://github.com/gofogo2/nest-js-api/commit/2137b3a398c670ea2058facccabbc7c6e9cddd4e

 

add config module · gofogo2/nest-js-api@2137b3a

 

github.com

 

[github code]

https://github.com/gofogo2/nest-js-api.git

 

GitHub - gofogo2/nest-js-api

Contribute to gofogo2/nest-js-api development by creating an account on GitHub.

github.com

 

#nestjs #typescript #javascript #js #ts #api #controller #service #typeorm #database #mysql #postgres #sql #nestjs to db #crud #get #put #post #delete #api #api기본적인 로직 #config #cross-env #joi #jestjs/config

반응형
댓글
반응형