typeORM 설치 명령어
npm i typeorm@0.3.0
npm i @nestjs/typeorm mysql요
만약 class-validator 이슈로 인해 설치에 실패했다면 아래 명령어들을 순서대로 실행해주세요.
npm uninstall class-validator
npm i typeorm@0.3.0
npm i @nestjs/typeorm mysql
npm i class-validator
app.module.ts파일에 아래와 같이 수정해주었습니다.
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { BoardModule } from "./board/board.module";
@Module({
imports: [
TypeOrmModule.forRoot({
type: "mysql",
host: "localhost",
port: 3306,
username: "여러분들의 데이터베이스 아이디",
password: "여러분들의 데이터베이스 비밀번호",
database: "board",
entities: [__dirname + "/**/*.entity{.ts,.js}"],
synchronize: true, // Production 환경에서는 false로 설정해야 합니다.
}),
BoardModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
여기서 중요한 점은 db에 관한 정보들이 고스란히 들어가 있다는 겁니다.
type: "mysql",
host: "localhost",
port: 3306,
username: "여러분들의 데이터베이스 아이디",
password: "여러분들의 데이터베이스 비밀번호",
database: "board",
entities: [__dirname + "/**/*.entity{.ts,.js}"],
synchronize: true,
그래서 자주 사용하는 .env 파일처럼 nestjs config 파일을 생성해서 옮기려합니다.
npm i @nestjs/config
class-validator 이슈로 설치를 실패했다면 다음 명령어들을 복사 + 붙여넣기 해서 실행해주세요.
npm uninstall class-validator
npm i @nestjs/config
npm i class-validator
그리고 .env파일도 작성해주세요.
DATABASE_HOST="localhost"
DATABASE_PORT=3306
DATABASE_USERNAME="여러분들의 데이터베이스 아이디"
DATABASE_PASSWORD="여러분들의 데이터베이스 비밀번호"
DATABASE_NAME="board"
DATABASE_SYNCHRONIZE=true
이제 해당 confg설정을 전역으로 참조하기 위해 app.module.ts 코드 변경
import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { BoardModule } from "./board/board.module";
import { TypeOrmConfigService } from "./config/typeorm.config.service";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { Article } from "./board/article.entity";
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }), // 일단 이것은 무조건 가장 위에서!
TypeOrmModule.forRootAsync({
imports: [ConfigModule], // 주목
useClass: TypeOrmConfigService,
inject: [ConfigService], // 주목
}),
BoardModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
typeorm.config.service.ts도 .env 파일의 환경변수를 읽어오는 버전으로 코드 변경
import { Injectable } from "@nestjs/common";
import { TypeOrmModuleOptions, TypeOrmOptionsFactory } from "@nestjs/typeorm";
import { ConfigService } from "@nestjs/config";
import { Article } from "src/board/article.entity";
@Injectable()
export class TypeOrmConfigService implements TypeOrmOptionsFactory {
constructor(private readonly configService: ConfigService) {}
createTypeOrmOptions(): TypeOrmModuleOptions {
return {
type: "mysql",
host: this.configService.get<string>("DATABASE_HOST"),
port: this.configService.get<number>("DATABASE_PORT"),
username: this.configService.get<string>("DATABASE_USERNAME"),
password: this.configService.get<string>("DATABASE_PASSWORD"),
database: this.configService.get<string>("DATABASE_NAME"),
entities: [__dirname + "/**/*.entity{.ts,.js}"],
synchronize: this.configService.get<boolean>("DATABASE_SYNCHRONIZE"),
};
}
}
아직 익숙치 않아 일단 그냥 따라해보고 있습니다.