// src/board/board.controller.ts
import {
Body,
Controller,
Delete,
Get,
Param,
Post,
Put,
} from '@nestjs/common';
import { BoardService } from './board.service';
// Controller 데코레이션을 입력할 때 URL path를 같이 입력해준다.
@Controller('board')
export class BoardController {
// BoardSerivce를 의존성 주입시켜준다.
constructor(private readonly boardService: BoardService) {}
// HTTP 메소드를 데코레이터로 입력
@Get()
findAll() {
return this.boardService.findAll();
}
@Get(':id')
find(@Param('id') id: number) {
return `find id:${id}`;
}
@Post()
create(@Body() data) {
return 'create';
}
@Put(':id')
// 받아야 하는 인자를 @Param, @Query, @Body를 통해 입력해준다.
update(@Param('id') id: number, @Body() data) {
return 'update';
}
@Delete(':id')
remove(@Param('id') id: number) {
return 'delete';
}
}
// board.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class BoardService {
findAll() {
return this.boards;
}
find(id: number) {
const index = this.boards.findIndex((board) => board.id === id);
return this.boards[index];
}
create(data) {
const newBoard = { id: this.getNextId(), ...data };
this.boards.push(newBoard);
return newBoard;
}
update(id: number, data) {
const index = this.getBoardId(id);
if (index > -1) {
this.boards[index] = {
...this.boards[index],
...data,
};
return this.boards[index];
}
return null;
}
delete(id: number) {
const index = this.getBoardId(id);
if (index > -1) {
const deleteBoard = this.boards[index];
this.boards.splice(index, 1);
return deleteBoard;
}
return null;
}
getBoardId(id: number) {
return this.boards.findIndex((board) => board.id === id);
}
getNextId() {
return this.boards.sort((a, b) => b.id - a.id)[0].id + 1;
}
}
// src/board/board.module.ts
import { Module } from '@nestjs/common';
import { BoardService } from './board.service';
import { BoardController } from './board.controller';
@Module({
controllers: [BoardController],
providers: [BoardService],
})
export class BoardModule {}
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { BoardModule } from './board/board.module';
@Module({
// BoardModule을 import해준다.
imports: [BoardModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Nest.js는 모듈화를 통해 API 불러오지만, Express는 Routes를 통해 API를 불러온다. 또한 Routes는 각각의 Path를 적어줘야 하는 불편함이 있었지만, Nest.js는 적을 필요가 없음
Nest.js는 Spring과 같이 어떠한 기능에 따라 폴더 구조를 나누고, 그 안에 Controller, Service, Module 파일이 들어가지만, Express는 Controller, Service, Repository 각각 나누고, 그 안에 해당 기능을 넣어놓는 타입 → 실제 둘 다 사용해본 결과 Nest.js의 폴더 구조가 더 보기 편하고 직관적이다.