DevBoi

[NestJS] CRUD 본격적으로 시작해보기 본문

Develop/[NestJs]

[NestJS] CRUD 본격적으로 시작해보기

HiSmith 2023. 5. 23. 22:12
반응형

일단 로컬 데이터를 기반으로 컨트롤러, 서비스를 연결해보자

 

Controller

import { Controller, Get } from '@nestjs/common';
import { BoardsService } from './boards.service';

@Controller('boards')
export class BoardsController {
   constructor(private boardService: BoardsService){}
   
   @Get('')
   getAllBoard(){
      return this.boardService.getAllBoards();
   }
   
}

 

Service

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

@Injectable()
export class BoardsService {
    private boards = [];
    
    getAllBoards(){
        return this.boards;
    }
}

 

 

이렇게 하고 /boards를 하면 아래와 같이 나온다.

당연하다, 로컬 변수의 값이 없으니.. 물론 데이터를 추가하면 데이터가 잘 나온다.

 

board.model.ts를 만들 예정이다.

게시물에 대한 내용을 옮기고 주고 뭐 그런 dto같은 개념이다.

 

export interface Board{
    id: string;
    title: string;
    description: string;
    status: BoardStatus
}

export enum BoardStatus {
    PUBLIC = 'PUBLIC',
    PRIVATE = 'PRIVATE'
}

 

위와 같이 만들고

BoardService의 내용을 바꿔준다.

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

@Injectable()
export class BoardsService {
    private boards: Board[] = [];
    
    getAllBoards() : Board[]{
        return this.boards;
    }
    createBoard(title: string, description: string){
        const board: Board = {
            id: uuid(),
            title,
            description,
            status: BoardStatus.PUBLIC
        }
        this.boards.push(board);
        return board;
    }
}

 

Controller도 조금 바꿔보자

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

@Controller('boards')
export class BoardsController {
   constructor(private boardService: BoardsService){}
   
   @Get('')
   getAllBoard(): Board[]{
      return this.boardService.getAllBoards();
   }
   
}

 

 

이렇게 되면 서비스에는 총 게시물 생성 에 대한 메소드가 생기고,

이게 전체 배열에 추가를 해준다. uuid는 임의로 id를 유니크한값으로 주기 위함이다.

무튼 이렇게 하면 생성 및 조회를 로컬 데이터 기반으로 동작하게 끔 구현할 수 있다.

 

마지막으로 동작 확인 및 컨트롤러에 추가해보자

 

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

@Controller('boards')
export class BoardsController {
   constructor(private boardService: BoardsService){}
   
   @Get('/')
   getAllBoard(): Board[]{
      return this.boardService.getAllBoards();
   }

   @Post('/create')
   createBoard(@Body('title') title: string,
               @Body('description') description: string){
      console.log(title);
      console.log(description)
   }
   
}

 

 

잘 나온다. 이제 service 로 해당 값을 넘겨보자

 

잘 가져온다.

 

마지막으로 수정한 컨트롤러 소스를 보자

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

@Controller('boards')
export class BoardsController {
   constructor(private boardService: BoardsService){}
   
   @Get('/')
   getAllBoard(): Board[]{
      return this.boardService.getAllBoards();
   }

   @Post('/create')
   createBoard(@Body('title') title: string,
               @Body('description') description: string){
         this.boardService.createBoard(title,description);
   }
   
}

 

 

이렇게 하면, 기본적인 CRUD까지는 아니고

생성 및 조회가 가능한것을 확인할 수있다.

반응형