NestJS에서 CRUD 중 C을 해보잣!

Olivia·2023년 8월 8일
0

[NestJS]

목록 보기
6/12
post-thumbnail

게시물 등록하는 서비스 만들기✨

게시물을 등록하기 위한 기능을 만들기 전에, 어떤 데이터들이 필요한지 정의할 필요가 있다.
각 게시물마다 Id, title, content 등이 필요하다.
이러한 데이터가 어떤 것이 있는지 모델을 만들어 정의한다.

모델 정의하기

1️⃣ board model 파일 생성

board 폴더에서 board.model.ts 파일을 생성한다.

2️⃣ model 정의하기

model은 class 또는 interface를 사용해서 정의한다.

  • class : 변수 타입 체크 & 인스턴스 생성
  • interface : 변수 타입만 체크
export interface Board {
  id: string;
  title: string;
  content: string;
}  

3️⃣ 타입으로 정의해주기

Service
import { Injectable } from '@nestjs/common';
import { Board } from './board.model';

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

  getAllBoards(): Board[] {
    return this.boards;
  }
}
Controller
import { Controller, Get } from '@nestjs/common';
import { BoardsService } from './boards.service';
import { Board } from './board.model';

@Controller('boards')
export class BoardsController {
  constructor(private boardsService: BoardsService) {}

  @Get()
  getAllBoard(): Board[] {
    return this.boardsService.getAllBoards();
  }
}

배열로 되어있기 때문에 Board[]를 써야한다.
만약 Board만 사용할 경우, 바로 타입스크립트 에러가 발생한다.

게시물 생성하기 - Service

Service에서 게시판과 관련된 로직을 처리하게 된다.
따라서 이 로직을 처리하기위해 Service에서 먼저 작업을 한뒤,
Controller에서 해당 Service를 불러오는 순서
로 만든다.

import { Injectable } from '@nestjs/common';
import { Board } from './board.model';
import { v1 as uuid } from 'uuid';

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

  getAllBoards(): Board[] {
    return this.boards; 
  }

  createBoard(title: string, content: string){
  	const board: Board = {
    	id: uuid,
      	title,
      	content,
    };
    this.boards.push(board);
    return board; // return board를 해줘야지, createBoard를 호출한 코드에서는 board 값을 받아서 변수에 저장하거나 직접 사용할 수 있다.
  }
}

게시물 생성하기 - Controller

위의 서비스에서 로직을 처리한뒤, Controller에서 해당 Service를 부른다.

게시물을 생성하기 위해서는 @Post(경로)데코레이터를 사용한 뒤 함수를 만들어 처리한다.
클라이언트가 게시판에 필요한 정보들을 입력한 뒤 해당 정보와 함께요청을 보낸다.
따라서 Controller는 해당 정보를 받아서 Service에게 보내야한다.

클라이언트가 요청할 때 같이 보내온 값을 가져오는 방법

  1. 모든 값을 다 가지고 올 때
    : @Body() body
    @Post()
	createBoard(@Body() body){}
  1. 하나 하나씩 값을 가져올 때
    : @Body(이름) 이름:type
    @Post()
    createBoard(
        @Body('title') title:string,
        @Body('content') content: string,
    ){}

Controller 코드

import { Controller, Get, Post, Body } from '@nestjs/common';
import { BoardsService } from './boards.service';
import { Board } from './board.model';

@Controller('boards')
export class BoardsController {
  constructor(private boardsService: BoardsService) {}

  @Get('/')
  getAllBoard(): Board[] {
    return this.boardsService.getAllBoards();
  }

  @Post()
  createBoard(
    @Body('title') title: string,
    @Body('content') content: string,
  ): Board {
    return this.boardsService.createBoard(title, content);
  }
}

참고
따라하며 배우는 NestJS

profile
👩🏻‍💻

0개의 댓글