ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [m1 맥북] - nest.js 공부하기 6. 게시물 생성하기
    Nest.js 2022. 4. 27. 00:09
    728x90

    게시물 생성 기능 만들기

    게시물에 관한 로직을 처리하는 곳은 Service입니다. 그래서 먼저 Service에서 로직을 처리해준 후에 Controller에서 서비스를 불러와주겠습니다.

    Service -> Controller

    //service
    import { Injectable } from '@nestjs/common';
    import { Board, BoardStatus } from './board.model';
    
    @Injectable()
    export class BoardsService {
        private boards: Board[] = []; //private 사용하는 이유는 클래스 내에서만 접근해서 수정 가능하게 하려고.
    
        getAllBoards(): Board[]{ //리턴값 타입지정
            return this.boards;
        }
    
        createBoard(title: string, description: string) {
            const board: Board = {
                
                title : title,
                description: description,
                status: BoardStatus.PUBLIC
            }
    
            
        }
    }

    게시물의 id값이 없어서 오류가 발생되는 모습이다.

    게시물의 ID는 모든 게시물에 유니크 해야한다. 그래서 유니크한 값을 위해 uuid 모듈을 이용해서 유니크한 값을 준다.


    uuid 모듈 설치

    npm install uuid --save
    //service
    import { Injectable } from '@nestjs/common';
    import { Board, BoardStatus } from './board.model';
    import { v1 as uuid } from 'uuid';
    @Injectable()
    export class BoardsService {
        private boards: Board[] = []; //private 사용하는 이유는 클래스 내에서만 접근해서 수정 가능하게 하려고.
    
        getAllBoards(): Board[]{ //리턴값 타입지정
            return this.boards;
        }
    
        createBoard(title: string, description: string) {
            const board: Board = {
                id : uuid(),
                title : title,
                description: description,
                status: BoardStatus.PUBLIC
            }
    
            this.boards.push(board);
            return board;
        }
    }

    Controller에서 Service로직을 불러온다.

    request와 response 부분 처리는 Controller 에서 해주면 됩니다.

    //controller
    import { Body, Controller, Get, Post } from '@nestjs/common';
    import { Board } from './board.model';
    import { BoardsService } from './boards.service';
    @Controller('boards')
    export class BoardsController {
        constructor(private boardsService : BoardsService){}
    
        @Get('/')
        getAllBoard(): Board[] {
            return this.boardsService.getAllBoards();
        }
    
        @Post()
        createBoard(
            @Body('title') title : string,
            @Body('description') description : string
        ): Board {
            return this.boardsService.createBoard(title, description);
        }
    }

    NestJS에서는 @Body body를 이용해서 가져옵니다.

    이렇게 하면 모든 request에서 보내온 값을 가져올 수 있으며, 하나씩 가져오려면 @Body('title') title:string 이런식으로 가져오면 된다.

    //한번에 가져올때
    @Post()
    createBoard(@Body() body){
    	console.log('body',body);
    }
    @Post()
    createBoard(
    	@Body('title') title: string,
        @Body('descriptiopn') description: string,
    ){
    	console.log(title);
    	console.log(description);
    }

     

    728x90
Designed by Tistory.