Nest.js에서 Pipe는 HTTP 요청의 인자를 가공하거나 검증하는 데 사용되는 중간 처리기입니다.
nestjs에서 기본적으로 제공하는 pipe입니다.
import { PipeTransform, Injectable, ArgumentMetadata } from '@nestjs/common';
@Injectable()
export class ValidationPipe implements PipeTransform {
transform(value: any, metadata: ArgumentMetadata) {
return value;
}
}
export interface ArgumentMetadata {
type: 'body' | 'query' | 'param' | 'custom';
metatype?: Type<unknown>;
data?: string;
}
와 같이 metadata의 형태를 보며 Pipe를 수정, 생성할 수 있습니다.
핸들러 수준 파이프
핸들러 수준 파이프는 특정 라우트 핸들러에만 적용됩니다. @UsePipes() 데코레이터를 사용하여 라우트 핸들러에 바인딩할 수 있습니다. 예를 들어 다음과 같이 작성할 수 있습니다.
@Get(':id')
@UsePipes(MyPipe)
async findOne(@Param('id') id: number) {
return this.userService.findOne(id);
}
파라미터수준
파라미터 수준 파이프는 특정 파라미터에만 적용됩니다. @Param(), @Query(), @Body() 등의 데코레이터를 사용하여 파라미터에 바인딩할 수 있습니다. 예를 들어 다음과 같이 작성할 수 있습니다.
@Get(':id')
async findOne(@Param('id', MyPipe) id: number) {
return this.userService.findOne(id);
}
전역수준
전역 수준 파이프는 애플리케이션의 모든 라우트 핸들러에 적용됩니다. app.useGlobalPipes() 메소드를 사용하여 전역적으로 바인딩할 수 있습니다. 예를 들어 다음과 같이 작성할 수 있습니다.
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new MyPipe());
await app.listen(3000);
http 요청으로 들어오는 인자를 안정성있게 처리하는 기능!!