인수를 처리하는 Pipe를 배우다.
1. Pipe
파이프는 @Injectable() 데코레이터로 주석이 달린 클래스이다. 파이프는 data transformation과 data validation을 위해서 사용된다. 파이프는 컨트롤러 경로 처리기에 의해 처리되는 인수에 대해 작동한다. Nest는 메서드가 호출되기 직전에 파이프를 삽입하고 파이프는 메서드로 향하는 인수를 수신하고 이에 대해 작동한다.
Data transformation은 입력 데이터를 원하는 형식으로 변환하는 것이다. 예를들어서 string형식을 int로 변환하는 것.
Data validation은 입력 데이터를 평가하고 유효한 경우 그대로 전달하면 된다. 그렇지 않은 경우 예외 처리를 해줘야 한다.
예를 들어 입력 데이터의 길이가 5자 이하여야 하는데 5자 초과면 예외 처리를 해줘야 하는 것.
Pipe 사용 방법에는 3가지가 있다.
1. Handler-level Pipes
@Post()
@UsePipes(pipe)
createBoard(@Body() createBoardDto: CreateBoardDto): Board {
// 게시물 1개니까 [] 없음
return this.boardsService.createBoard(createBoardDto);
}
핸들러 레벨에서 해당 위치에 @UsePipes() 데코레이터를 이용해서 사용할 수 있다.
이 파이프는 모든 파라미터에 적용된다.
2. Parameter-level Pipes
@Patch('/:id/status')
updateBoardStatus(
@Param('id') id: string,
@Body('status', ParameterPipe) status: BoardStatus,
) {
return this.boardsService.updateBoardStatus(id, status);
}
}
파라미터 레벨의 파이프는 조금 더 좁은 개념이다.
특정한 파라미터에만 적용되는 파이프이다.
저 위치에서 사용하면 된다.
3. Global-level Pipes
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(GlobalPipes)
await app.listen(3000);
}
bootstrap();
글로벌 레벨 파이프는 애플리케이션 레벨의 파이프이다.
클라이언트에서 들어오는 모든 요청에 적용이 된다.
가장 상단영역인 main.ts에 넣어주면 된다.
커스텀으로 파이프를 만들어서 사용할수도 있고 NestJs에서 기본적으로 제공하는 6가지 파이프가 있다. ValidationPipe
ParseIntPipe
ParseBoolPipe
ParseArrayPipe
ParseUUIDPipe
DefaultValuePipe이름을 보면 각각의 파이프가 어떠한 역할을 하는지 짐작을 할 수 있다.
'Back-End > NestJS' 카테고리의 다른 글
[NestJS] 커스텀 파이프 만들기 (0) | 2024.01.17 |
---|---|
[NestJS] 특정 값 찾기에서 없을 때 예외처리 (0) | 2024.01.16 |
[NestJS] Param을 활용한 ID기준 게시물 찾기 (0) | 2024.01.11 |
[NestJS] DTO 만들기 (0) | 2024.01.09 |
[NestJS] 게시물 생성하는 Service, Controller 생성 (Request, Response) (0) | 2024.01.08 |