들어가기
typeOrm은 DB와 연결 및 통신 하는 언어임,
Nuber에서는 postgres사용할 것입니다.
https://typeorm.io/supported-platforms
지원되는 Platform
nestJs에서 database연결
https://docs.nestjs.com/techniques/database
https://github.com/typeorm/typeorm
$ npm install --save @nestjs/typeorm typeorm pg
.env위에 존재하는 설정모듈
https://docs.nestjs.com/techniques/configuration
$ npm i --save @nestjs/config
$ npm i cross-env
=>가상변수를 설정하게 해줌(cross-env NODE_ENV=dev 등등..)
https://www.npmjs.com/package/joi
https://www.npmjs.com/package/@types/joi
$ npm i joi
=>데이터 유효성 검사~
import { ApolloDriver, ApolloDriverConfig } from '@nestjs/apollo';
import * as Joi from 'joi'; ///유효성검사를 위해서 Joi import함~
import { Module } from '@nestjs/common';
import { GraphQLModule } from '@nestjs/graphql';
import { RestaurantModule } from './restaurant/restaurant.module';
import { TypeOrmModule } from '@nestjs/typeorm'; ///TypeOrm사용을 위한 import
import { ConfigModule } from '@nestjs/config'; ///Config사용을 위한 import
import { CommonModule } from './common/common.module';
import { UsersModule } from './users/users.module';
import { User } from './users/entities/user.entity';
@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(),
}),
}),
///ConfingModule 사용을 위한 setting, isGlobal을 true로 하고,
///envFilePath와, ignoreEnvFile은 package.json에서 추가로 setting한다.
///validationsSchema는 Joi로 유효성검사를 한다, DB들은 .env.dev에 내용임
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: true,
logging: true,
entities: [User],
}),
///DB랑 연결 및 통신하기 위해 TypeOrmModule사용, 여기에 type, host등을
///적어도 되지만, .env.dev파일에 기록한다.
///synchronize는 사직시, DB를 연결함.
///entities는 Model. 나중에, 만드는 Entity를 연결해 줌.
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
autoSchemaFile: true,
}),
RestaurantModule,
CommonModule,
UsersModule,
],
controllers: [],
providers: [],
})
export class AppModule {}
start, start:dev, start:prod 부분만 참고해서 볼것!!
"prebuild": "rimraf dist",
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "cross-env NODE_ENV=prod nest start",
"start:dev": "cross-env NODE_ENV=dev nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=postgres
DB_PASSWORD=
DB_NAME=nuber-eats
DB연결 내용을 따로 빼서 담아줌,,
!!!이제 Entity를 만들어 주면 자동적으로 DB(postgres)와 연결됨.