// pg is shortcut of 'postgresql'
$ npm install --save @nestjs/typeorm typeorm pg
$ npm i --save @nestjs/config
$ npm i cross-env
$ npm i joi
.env.dev
.env.prod
.env.test
세 파일 생성하기
{
...
..
"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",
...
...
}
DB_HOST="localhost"
DB_PORT=5432
DB_USERNAME="username"
DB_PASSWORD="password"
DB_NAME="name of db"
...
..
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: []
})