[우버이츠 클론코딩] # 3. 가장 중요한 Config

GisangLee·2022년 6월 14일
0

Giber-eats

목록 보기
4/5

1. Install

// pg is shortcut of 'postgresql'
$ npm install --save @nestjs/typeorm typeorm pg
$ npm i --save @nestjs/config
$ npm i cross-env
$ npm i joi

2. .ENV + TypeORM Setup

.env.dev
.env.prod
.env.test
세 파일 생성하기

  • package.json
{
...
  ..
  "start": "corss-env NODE_ENV=prod nest start",
  "start:dev": "cross-env NODE_ENV=dev nest start --watch",
  ...
  ...
  "test": "cross-env NODE_ENV=test jest",
  ...
  ...
}
  • .env.dev
DB_HOST="localhost"
DB_PORT=5432
DB_USERNAME="username"
DB_PASSWORD="password"
DB_NAME="name of db"
  • app.module.ts
...
..
import * as Joi from "joi";
import { ConfigModule } from "@nest/config";
import { TypeOrmModule } from "@nestjs/typeorm";

@Module({
  imports: [
    RestaurantModule,
    ConfigModule({
      isGlobal: true,
      envFilePath: process.env.NODE_ENV === "dev" ? ".env.dev" : ".env.test",
      
      // 서버에 deploy할 때, 환경편수 파일을 사용하지 않겠다
      ignoreEnvFile: process.env.NODE_ENV === "prod",
      
      // env 변수 validation 검사
      validationSchema: Joi.object({
        NODE_ENV: Joi.string().valid("dev", "prod", "test").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: parseInt(process.env.DB_PORT),
      username: process.env.DB_USERNAME,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      synchronize: true,
      logging: true
    }),
    GraphqlModule.forRoot({
      autoSchemaFile: true,
    })
  ],
  controllers: [],
  providers: []
})
profile
포폴 및 이력서 : https://gisanglee.github.io/web-porfolio/

0개의 댓글