Delete 구현
tymeORM에서 remove()와 delete()의 차이부터 짚고 넘어가려고 한다.
remove()
- 무조건 존재하는 아이템을 remove 메소드를 이용해서 지워야 한다. 그렇지 않으면 Error(404)
delete()
만약 아이템이 존재하면 지우고 존재하지 않으면 아무런 영향이 없다.
이번 delete 구현에서는 delete를 사용하여 구현 하려고 한다.
우선 service 먼저 보자
import { Injectable, NotFoundException } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Board } from './board.entity';
import { BoardRepository } from './board.repository';
import { CreateBoardDto } from './dto/create-board.dto';
@Injectable()
export class BoardsService {
constructor(
@InjectRepository(Board)
private boardRepository: BoardRepository,
) {}
// 중략 ...
// 게시물 삭제
// return은 아무것도 해주지 않으므로 타입은 void로 지정
async deleteBoard(id: number): Promise<void> {
const result = await this.boardRepository.delete(id);
if (result.affected == 0) {
throw new NotFoundException(`Can't find Board with id ${id}`);
}
}
}
리턴타입은 아무것도 리턴해주지 않으므로 void를 적용한다.
result.affected == 0 이 의미하는 것은 params에 넣은 id가 존재하지 않는다는 뜻인데, 존재하지 않으면 404 에러를 띄워 줄 수 있다. (delete를 사용했기 때문에 따로 에러처리가 필요하다.)
controller 코드
import {
Body,
Controller,
Delete,
Get,
Param,
ParseIntPipe,
Post,
UsePipes,
ValidationPipe,
} from '@nestjs/common';
import { Board } from './board.entity';
import { BoardsService } from './boards.service';
import { CreateBoardDto } from './dto/create-board.dto';
@Controller('boards')
export class BoardsController {
constructor(private boardsService: BoardsService) {}
// ... 중략
@Delete('/:id')
deleteBoard(@Param('id', ParseIntPipe) id: number): Promise<void> {
return this.boardsService.deleteBoard(id);
}
}
ParseIntPipe를 통해서 params의 값이 무조건 정수형으로 들어오게 해준다.
'Nest.js' 카테고리의 다른 글
[Nest.js] 회원가입과 로그인 구현 1 (0) | 2023.01.27 |
---|---|
[Nest.js] Nest.js + PostgreSQL + typeORM CRUD 구현하기 3 (0) | 2023.01.26 |
[Nest.js] Nest.js + PostgreSQL + typeORM CRUD 구현하기 1 (1) | 2023.01.26 |
[Nest.js] Providers란? (0) | 2023.01.25 |
[Nest.js] jest를 이용한 테스트 코드 작성 (0) | 2023.01.13 |