게시물을 등록하기 위한 기능을 만들기 전에, 어떤 데이터들이 필요한지 정의할 필요가 있다.
각 게시물마다 Id, title, content 등이 필요하다.
이러한 데이터가 어떤 것이 있는지 모델을 만들어 정의한다.
board 폴더에서 board.model.ts
파일을 생성한다.
model은 class 또는 interface를 사용해서 정의한다.
export interface Board {
id: string;
title: string;
content: string;
}
import { Injectable } from '@nestjs/common';
import { Board } from './board.model';
@Injectable()
export class BoardsService {
private boards: Board[] = [];
getAllBoards(): Board[] {
return this.boards;
}
}
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에서 먼저 작업을 한뒤,
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에서 해당 Service를 부른다.
게시물을 생성하기 위해서는 @Post(경로)
데코레이터를 사용한 뒤 함수를 만들어 처리한다.
클라이언트가 게시판에 필요한 정보들을 입력한 뒤 해당 정보와 함께요청을 보낸다.
따라서 Controller는 해당 정보를 받아서 Service에게 보내야한다.
@Body() body
@Post()
createBoard(@Body() body){}
@Body(이름) 이름:type
@Post()
createBoard(
@Body('title') title:string,
@Body('content') content: string,
){}
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);
}
}