@Body() 데코레이터는 NestJS에서 사용되는 데코레이터로, HTTP 요청의 본문(body)을 가져와서 컨트롤러 메서드의 매개변수로 주입하는 역할을 합니다.
이를 통해 클라이언트가 POST, PUT 등의 요청을 보낼 때 본문에 포함된 데이터를 쉽게 접근할 수 있습니다.
import { Controller, Post, Body } from '@nestjs/common';
class CreateCatDto {
name: string;
age: number;
}
@Controller('cats')
export class CatsController {
@Post()
create(@Body() createCatDto: CreateCatDto) {
return `This action adds a new cat with the name ${createCatDto.name}`;
}
}
createCatDto는 요청의 본문에 포함된 데이터를 가지고 있습니다.
이 때, @Body() 데코레이터는 HTTP 요청의 본문을 createCatDto 객체로 변환하여 create 메서드의 매개변수로 전달합니다.
내부 구현
@Body() 데코레이터는 NestJS의 파라미터 데코레이터 시스템을 사용하여 구현됩니다. 이 데코레이터는 요청의 본문 데이터를 추출하고, 필요한 경우 이를 변환하거나 유효성 검사를 수행합니다. 실제로는 NestJS가 제공하는 여러 파이프와 인터셉터를 활용하여 이러한 작업이 수행됩니다.
NestJS의 Body 데코레이터는 Express의 req.body를 활용하여 요청 본문을 가져옵니다.
이때 JSON 파서 미들웨어가 등록되어 있어야 하며, 이는 보통 main.ts 파일에서 app.use(express.json())과 같은 형태로 설정됩니다.
NestJS는 이를 자동으로 설정해주기 때문에 main.ts에서 직접 볼 일이 없게 됩니다.
이 데코레이터는 주로 HTTP 요청 핸들러에서 사용되며, 데이터를 쉽게 추출하고, DTO(Data Transfer Object)와의 매핑을 통해 타입 안전성을 제공하는 데 유용합니다.
파이프 활용 예시
흔히 expressjs에서는 부동소수점과 관련된 모듈을 직접 작성하는 편입니다.
하지만 nest는 왠만한 것은 다 만들어져 있어서 가져다 쓰면 됩니다.
import { Controller, Post, Body, ParseFloatPipe } from '@nestjs/common';
@Controller('items')
export class ItemsController {
@Post()
createItem(
@Body('price', ParseFloatPipe) price: number,
) {
return `Price is: $${price.toFixed(2)}`;
}
}
위처럼 파라미터에 ParseFloatPipe 를 사용하면 해당 price 값을 부동 소수점 숫자로 변환해줍니다.
파이프는 컨트롤러의 핸들러 메서드에 전달되는 데이터를 변환하거나 유효성을 검사하는 데 사용됩니다.
이를 통해 컨트롤러의 코드를 간결하고 유지보수하기 쉽게 만들 수 있습니다.
parser와 관련된 파이프는 node_modules/@nestjs/common/pipes 에 존재합니다.
'JaveScript > NestJS' 카테고리의 다른 글
Middleware (0) | 2024.06.11 |
---|---|
@Module() (0) | 2024.06.10 |
Provider (0) | 2024.06.09 |
자동으로 JSON으로 직렬화되는 이유 (0) | 2024.06.06 |
main.ts (0) | 2024.06.04 |