설치

# Nest.js에서 TypeORM을 연동시켜주기 위해 사용하는 모듈
npm install --save @nestjs/typeorm

# typeorm module
npm install --save typeorm

# 사용하고자 하는 DB의 모듈을 설치해주면 됨(pg는 postgreSql)
npm install --save pg

셋팅 방법

기본적으로 NestJS TypeORM을 사용하기 위해서는 셋팅 할 부분이 조금 많다.

@Module({
	imports: [
		TypeOrmModule.forRoot(typeORMConfig),
		CategorysModule,
		PostsModule,
		CommentMasterModule,
		CommentModule,
	],
	controllers: [AppController],
	providers: [AppService],
})

export class AppModule {}

app.module.ts

import { TypeOrmModuleOptions } from "@nestjs/typeorm";

import * as dotenv from "dotenv";

dotenv.config();  

export const typeORMConfig: TypeOrmModuleOptions = {
	type: "mysql",
	host: "localhost",
	port: 3306,
	username: process.env.DB_USER_NAME,
	password: process.env.DB_PASSWORD,
	database: process.env.DB_NAME,
	synchronize: true,
	entities: [__dirname + "/**/*.entity{.ts,.js}"],
	// migrations: [__dirname + "/**/migrations/*.js"],
	logging: true,
	verboseRetryLog: true,
	autoLoadEntities: true,
	retryAttempts: 3000,
};

config/typeorm.config.ts

NestJS에서는 env를 사용하려면 위 처럼 dotenv.config()를 작성해 줘야지 사용 가능하다.

사용 방법

보통 DB를 typeorm으로 컨트롤 하는 로직 자체는 ~.service.ts 에 주로 위치해 있습니다.
예를 들어서 posts.service.ts를 살펴보게 되면 아래와 같이 사용 가능합니다.

...

@Injectable()
export class PostsService {
	@InjectRepository(PostEntity) private postRepository: Repository<PostEntity>;
	constructor(private dataSource: DataSource) {}
		
	async findOne(id: number, category: string): Promise<object> {
		// if (category === "all") {
		const post = await this.postRepository.find();
		// }
		return post;
	}
}

위 처럼 InjectRepository 를 통해서 Repository 를 통해서 의존성을 주입 합니다.
위에서 의존성을 주입 한 다음에는 내부적으로 private으로 사용할 수 있게, 객체를 만들고 사용 합니다.

spring과는 다른 방식으로 Nest에서 의존성을 주입하는 것 같은데,,,이는 좀 알아봐야할 요소 인듯 하다.


#Back #NodeJS #NestJS #DB #ORM