Nest.js의 컨트롤러는 클라이언트의 요청(Request)을 받아 처리한 후 응답(Response)하는 역할을 함
<aside> 💡
Routing Routing은 클라이언트 요청에 따라 어떤 기능으로 연결할지 결정하고 처리하는 과정
</aside>
import { Controller, Get, Query, Post, Body, Put, Param, Delete } from '@nestjs/common';
import { CreateCatDto, UpdateCatDto, ListAllEntities } from './dto';
@Controller('cats')
export class CatsController {
@Post() // 데이터 생성
create(@Body() createCatDto: CreateCatDto) {
return 'This action adds a new cat';
}
@Get() // 전체 데이터 목록 조회
findAll(@Query() query: ListAllEntities) {
return `This action returns all cats (limit: ${query.limit} items)`;
}
@Get(':id') // 데이터 상세 조회
findOne(@Param('id') id: string) {
return `This action returns a #${id} cat`;
}
@Put(':id') // 데이터 수정
update(@Param('id') id: string, @Body() updateCatDto: UpdateCatDto) {
return `This action updates a #${id} cat`;
}
@Delete(':id') // 데이터 삭제
remove(@Param('id') id: string) {
return `This action removes a #${id} cat`;
}
}
컨트롤러는 @Controller()라는 데코레이터를 사용
괄호 안에는 요청 라우팅 path
를 지정 가능 (컨트롤러 내부의 모든 엔드 포인트의 접두어 역할)
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {}
// @Controller() => <http://localhost:3000/>
// @Controller('cats') => <http://localhost:3000/cats>
<aside> 💡
Decorator Decorator는 Typescript의 기능 중 하나로, 클래스, 메서드, 프로퍼티, 또는 매개변수에 메타데이터(metadata)를 추가하거나 특정 기능을 부여하는 특별한 종류의 선언 방식. NestJS는 이 Decorator를 사용하여 프레임워크의 핵심 기능을 구현하고 개발자가 애플리케이션을 쉽게 구성하고 있음.
</aside>
Controller 내에서는 HTTP Request Method 데코레이터 사용 가능
@Get()
, @Post
, @Put
, @Patch
, @Delete
과 같은 HTTP Request Method 데코레이터도 routing path
지정 가능import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
// @Get() => <http://localhost:3000/cats>
// @Get('profile') => <http://localhost:3000/cats/profile>
NestJS는 Express를 사용하고 있어, Request 객체 사용 가능
메서드의 parameter로 @Req() 데코레이터 사용 가능
import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';
@Controller('cats')
export class CatsController {
@Get()
findAll(@Req() request: Request): string {
console.log(request);
return 'This action returns all cats';
}
}