TypeORM은 두가지 패턴을 선택으로 사용할 수 있다.
nestJS 에서는 Data Mapper 패턴이 사용하기에 편리하다.
Data Mapper 패턴을 이용해서 만들어보쟈!
npm install --save @nestjs/typeorm typeorm pg
디비에 접속 하기 위해 접속 정보를 입력해줍니다.
보안을 위해 env에 입력을 해둡니다.
AppModule 데코레이터의 imports 부분에 TypeOrmModule 객체의 forRoot 를 통해 접속 정보와 커넥션 option을 작성 후 Context Reload 가 되면 Nest 코어는 TypeOrmModule 을 초기화 합니다.
@Module({
imports: [
**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: process.env.NODE_ENV !== 'prod',
logging: true,
entities: [Restaurant] ***사용entity***
}),**
RestaurantsModule
],
controllers: [],
providers: [],
})
import { Field, ObjectType } from "@nestjs/graphql";
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
@ObjectType()
@Entity()
export class Restaurant {
@PrimaryGeneratedColumn()
@Field(type => Number)
id: number;
@Field(type => String)
@Column()
name: string;
@Field(type => Boolean)
@Column()
isVegan: boolean;
@Field(type => String)
@Column()
address: string;
@Field(type => String)
@Column()
ownersName: string;
@Field(type => String)
@Column()
categoryName: string;
}
restaurant 모듈안에 Entity 객체를 imports 해줍니다.
@Module({
imports: [TypeOrmModule.forFeature([Restaurant])],
providers: [RestaurantsResover, RestaurantService]
})
nestJS의 데코레이션 @InjectRepository를 사용하여
const restaurantRepository = connection.getRepository(Restaurant); 컨넥션연결을 해주는 코드를 간편한게 사용 할 수 있습니다.
this.restaurants.find(); 은 typeorm의 문법으로 restaurants entity에서 전체select를 하는것입니다.
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Restaurant } from './entities/restaurant.entity';
@Injectable()
export class RestaurantService {
constructor(
@InjectRepository(Restaurant)
private readonly restaurants: Repository<Restaurant>,
) { }
getAll(): Promise<Restaurant[]> {
return this.restaurants.find();
}
}