NestJS에서 CRUD 중 R을 해보잣!

Olivia·2023년 8월 8일
0

[NestJS]

목록 보기
5/12
post-thumbnail

모든 게시물을 가져오는 서비스 만들기✨

service에서 해당 로직을 구현한다.
DB 연동은 추후 다시 업데이트할 것.

01. Controller

클라이언트에서 요청을 보내면, 해당 요청은 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() 메소드를 사용해 요청을 처리한다.

02. Service

import { Injectable } from '@nestjs/common';

@Injectable()
export class BoardsService {
  private boards = []; 

  getAllBoards() {
    return this.boards;
  }
}
  • private을 사용하지 않으면, 다른 컴포넌트에서 해당 배열을 수정할 수 있기 때문에, 이를 방지하고자 사용한다.
  • getAllBoards()함수를 호출하면,
    위의 보드 배열에 있는 값을 return한다.

03. Controller

위의 Service에서 return받은 값을 클라이언트에게 반환해 보내준다.

결과 Ꙭ̮


특정 게시물을 가져오는 서비스 만들기✨

id로 특정 글을 가져올 수 있다.

Service

getBoardById(id: string):Board{
	return this.boards.find((board)=> board.id === id);
}
  • boards가 현재 배열이라 여러개의 게시물이 존재한다.
  • find()메소드를 사용해서 여러개의 게시물 중에 하나의 게시물을 찾게 된다.
  • 이때 게시물의 id와 해당 id가 같은 것을 찾는다.
  • 타입! 찾는 게시물이 1개이기 때문에 Board타입은 배열을 붙이지 않아도 된다.

Controller

@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;
}

참고
따라하며 배우는 NestJS

profile
👩🏻‍💻

0개의 댓글