service에서 해당 로직을 구현한다.
DB 연동은 추후 다시 업데이트할 것.
클라이언트에서 요청을 보내면, 해당 요청은 Controller로 간다.
이 컨트롤러에서 요청 경로에 맞춰서 해당 Handler로 가게 한다.
import { Controller, Get } from '@nestjs/common';
import { BoardsService } from './boards.service';
@Controller('boards')
export class BoardsController {
constructor(private boardsService: BoardsService) {}
@Get()
getAllBoard() {
return this.boardsService.getAllBoards();
}
}
localhost:3000/boards
를 입력하면, /boards/
이기때문에 getAllBoards()
로 가게 된다.getAllBoards()
는 해당 요청을 처리하기위해 boardService를 부른다.getAllBoards()
메소드를 사용해 요청을 처리한다.import { Injectable } from '@nestjs/common';
@Injectable()
export class BoardsService {
private boards = [];
getAllBoards() {
return this.boards;
}
}
getAllBoards()
함수를 호출하면,위의 Service에서 return받은 값을 클라이언트에게 반환해 보내준다.
id
로 특정 글을 가져올 수 있다.
getBoardById(id: string):Board{
return this.boards.find((board)=> board.id === id);
}
find()
메소드를 사용해서 여러개의 게시물 중에 하나의 게시물을 찾게 된다.@Get("/:id")
getBoardById(@Param('id') id: string): Board {
return this.boardsService.getBoardById(id);
}
id가 붙는 경로가 들어올 경우 실행된다.
경로 중 @Param()
을 사용할 때, 여러개의 파라미터가 들어올 경우,
(@Param() params: string[])
으로 사용한다.
그렇지 않고, 한개의 파라미터만 존재할 경우,
(@Param('id') id: string)
형태로 사용한다.
게시물 1개만 return하기 때문에 역시 Board 타입에서 배열을 붙이지 않아도 된다.
예외 인스턴스를 생성해서 404 에러로 처리할 수 있다.
Service에서 getBoardById 메소드에다가NotFoundException()
를 사용한다.
getBoardById(id: string):Board{
const found = this.boards.find((board)=> board.id === id);
if(!found){
throw new NotFoundException();
}
return found;
}
결과
{
"error": "Not Found",
"statusCode": 404
}
NotFoundException("메세지 작성") 으로 입력하면 된다.
getBoardById(id: string):Board{
const found = this.boards.find((board)=> board.id === id);
if(!found){
throw new NotFoundException("해당 게시물을 찾을 수 없습니다.");
}
return found;
}