게시물 생성과 관련된 Service의 로직 작성과 Controller의 request, response 방법을 배우다
1. Service에서 게시물 생성 로직 작성하기
서비스 부분은 기능 로직을 작성하는 파일이다. 나는 게시물을 생성하면 전체 게시물 배열에 게시물 1개를 추가하는 로직을 작성할 것이다. 먼저 Service에서 로직을 처리한 후 Controller에서 서비스 메서드를 불러와서 사용해야 한다.
// boards.service.ts
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, // title: title 자바스크립트에서는 key와 value가 똑같으면 한 번만 적어도 됨
description,
status: BoardStatus.PUBLIC,
};
this.boards.push(board);
return board;
}
}
createBoard 메서드가 새로운 게시물을 생성하는 메서드이다. 매개변수로는 제목인 title, 내용인 description을 받는다. 두 매개변수의 타입은 당연히 string이다. board.model에서 게시물 데이터 타입의 형식을 작성했었다. 거기에서 필요했던 속성은 4가지로 id, title, description, status이다. title과 description은 매개변수로 받기 때문에 그대로 value로 넣어주면 title : title이 되는데 자바스크립트에서는 key와 value의 모양이 같으면 1개만 적으면 된다.
상태를 나타내는 status는 board.model에서 BoardStatus라고 enum을 사용해서 새로운 타입을 만들었던 것을 기억하면 된다. 기본값으로 PUBLIC을 사용하겠다.
마지막으로 게시글의 id를 설정해줘야하는데 데이터베이스를 사용하면 고유한 ID는 데이터베이스에서 처리할 수 있지만, 지금은 데이터베이스를 사용하지 않고 있기 때문에 uuid모듈을 사용해서 게시글에 고유 ID를 갖게 한다.
uuid 모듈 설치
npm i uuid --save
board를 만들고 그 새로운 board를 전체 board가 들어있게 하는 boards 배열에 push한다. 그리고 board를 반환하여 컨트롤러로 보낸다.
2. Controller에서 Request, Response 처리하기
// boards.controller.ts
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 boardsService: BoardsService) {}
@Get()
getAllBoards(): Board[] {
return this.boardsService.getAllBoards();
}
@Post()
createBoard(
@Body('title') title: string,
@Body('description') description: string,
): Board {
// 게시물 1개니까 [] 없음
return this.boardsService.createBoard(title, description);
}
}
Controller에서는 Service에서 로직을 처리하기 위해 필요로하는, 즉 매개변수를 Controller 에서 Service 로 보내준다. 클라이언트에서 입력한 값을 요청하는 것을 Request라고 하는데 Express에서는 bodyParser 모듈을 이용해서 req.body를 사용했다. NestJS에서는 데코레이션을 사용하여 @Body() body를 사용한다. 이 body 안에 request한 값이 들어있다. 우리 상황이면 title과 description이 들어있을 것이다. 하나씩 사용하려면 @Body('title') title 과 같이 사용하면 된다.이것을 Service에서 로직 처리할 때 사용할 수 있게 Controller에서 메서드를 불러와서 인자로 사용해주면 된다.
'Back-End > NestJS' 카테고리의 다른 글
[NestJS] Param을 활용한 ID기준 게시물 찾기 (0) | 2024.01.11 |
---|---|
[NestJS] DTO 만들기 (0) | 2024.01.09 |
[NestJS] model 생성하기 (게시물) (0) | 2024.01.07 |
[NestJS] Service 생성 (0) | 2024.01.05 |
[NestJS] NestJS 시작과 아키텍처 구조, 프로바이더와 서비스란 (0) | 2024.01.04 |