이 글은 업데이트 되었습니다. 아래 링크를 참조하세요.
https://codegear.tistory.com/116
----------------------------------------------------------
이 내용의 동영상 강의 2편입니다.
Nest에서 db를 연결하여 개발을 진행해야할 경우, 좋은 선택지 중 하나가 TypeORM을 사용하는 것입니다.
TypeORM연결을 위해서는 DB가 설치 되어 있어야 합니다.
우리는 Docker를 이용해서 MySQL을 빠르게 설치하고 사용해보겠습니다.
MySQL 설치는 이전 글을 참고해 주세요.
https://codegear.tistory.com/66
MySQL Workbench를 이용해서 test schema를 생성합니다.
CREATE SCHEMA test DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
이전까지 진행한 Nestjs 소스는 github에서 받으실 수 있습니다.
https://github.com/CodeGearGit/nest-cats
먼저 TypeORM을 설치합니다.
npm install --save @nestjs/typeorm typeorm mysql2
설치가 완료되면 app.module.ts에 TypeORM 모듈을 import 합니다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
CatsModule
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
* 주의 synchronize: true는 운영에서는 사용하지 마세요.
다음과 같이 cats/entity/cats.entity.ts 파일을 만듭니다.
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Cat {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@Column()
age: number;
@Column()
breed: string;
@Column({ default: true })
isActive: boolean;
}
app.module.ts에 cats.entity를 추가합니다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
import { Cat } from './cats/entity/cats.entity';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [Cat],
synchronize: true,
}),
CatsModule
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
cats.module.ts에서 cats.entity를 사용하기 위해 다음과 같이 소스를 추가합니다.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { Cat } from './entity/cats.entity';
@Module({
imports: [TypeOrmModule.forFeature([Cat])],
exports: [TypeOrmModule],
controllers: [CatsController],
providers: [CatsService]
})
export class CatsModule {}
cats.service.ts에 catsRepository를 생성하여 data를 핸들링할 수 있게 합니다.
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Cat } from './entity/cats.entity';
import { getConnection } from "typeorm";
@Injectable()
export class CatsService {
constructor(
@InjectRepository(Cat)
private catsRepository: Repository<Cat>,
) {}
findAll(): Promise<Cat[]> {
return this.catsRepository.find();
}
findOne(id: string): Promise<Cat> {
return this.catsRepository.findOne(id);
}
async create(cat: Cat): Promise<void> {
await this.catsRepository.save(cat);
}
async remove(id: number): Promise<void> {
await this.catsRepository.delete(id);
}
async update(id: number, cat: Cat): Promise<void> {
const existCat = await this.catsRepository.findOne(id);
if(existCat){
await getConnection()
.createQueryBuilder()
.update(Cat)
.set({
name: cat.name,
age: cat.age,
breed: cat.breed
})
.where("id = :id", { id })
.execute();
}
}
}
cats.controller.ts를 다음과 같이 작성합니다.
import { Body, Controller, Delete, Get, Param, Post, Put } from '@nestjs/common';
import { CatsService } from './cats.service';
import { Cat } from './entity/cats.entity';
@Controller('cats')
export class CatsController {
constructor(private catsService: CatsService){};
@Get()
findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}
@Get(':id')
findOne(@Param('id')id: string): string {
return `This action returns a #${id} cat`;
}
@Post()
create(@Body() cat: Cat){
return this.catsService.create(cat);
}
@Put(':id')
update(@Param('id')id: number, @Body() cat: Cat){
this.catsService.update(id, cat);
return `This action updates a #${id} cat`;
}
@Delete(':id')
remove(@Param('id')id: number){
this.catsService.remove(id);
return `This action removes a #${id} cat`;
}
}
이제 Postman을 이용해서 테스트를 합니다.
POST를 이용해 데이터를 생성합니다.
GET으로 조회를 하면 다음과 같습니다.
다시 POST 로 추가 데이터를 입력합니다.
다시 GET으로 전체 데이터를 조회합니다.
수정, 삭제등도 테스트 하시면 됩니다.
'Nestjs 기초 동영상강좌' 카테고리의 다른 글
NestJS - 12. JWT 토큰 생성 (0) | 2022.01.30 |
---|---|
NestJS - 11. 비밀번호 암호화(bcrypt) (2) | 2022.01.29 |
NestJS - 10. 로그인 #1 - 아이디/패스워드 체크 (0) | 2022.01.23 |
NestJS - 09. 회원가입 (2) | 2022.01.22 |
NestJS - 07.미들웨어(Middleware) (0) | 2022.01.02 |
NestJS - 06.서비스 만들기 (프로바이더) (0) | 2021.12.24 |
NestJS - 05.컨트롤러 만들기 (0) | 2021.12.20 |
NestJS - 04.소스 자동 생성기 (0) | 2021.12.18 |