
NestJS의 기본적인 요청 라이프사이클
파이프는
Controller에 제공되는argument들에 적용된다.
이 argument 에는@Body, @Param등 이미 우리가 사용하고 있는 입력@Annotation들이 모두 포함된다.Pipe 는 argument 데이터를 가공 후 ,
Controller에 값들을 넘겨준다.
transformation: 데이터를 원하는 형태로 변형한다. (예: string 에서 number로 변환)
validation: 입력된 값이 정상적인 값인지 확인한다. 아니라면 에러를 던진다.
기본제공되는
ValidationPipe또한 GlobalPipe 의 일종이다.
async function bootStrap(){
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(new ValidationPipe()); /* GlobalPipe 적용 */
await app.listen(3000);
}
bootStrap();
컨트롤러에만 적용되는 파이브.
아래는 컨트롤러 파이프에ValidationPipe를 적용한 것
@Controller('movie')
@UsePipes(new ValidationPipe()) /* Controller 파이프 적용 */
export class MovieController(){
constructor(private readonly movieService: MovieService){}
@Get()
getMovies(@Query('title') title?: string){
return this.movieService.findAll(title);
}
}
@Controller('movie')
export class MovieController(){
constructor(private readonly movieService: MovieService){}
@Patch(':id')
@UsePipes(new ValidationPipe()) /* Route Pipe 적용 */
patchMovie(@Param('id') id: number, @Body() body: UpdateMovieDTO){
return this.movieService.update(id, body);
}
}
라우트 파라미터에 적용하는 파이프.
기본 제공되는 여러 파이프가 존재한다.
@Controller('movie')
export class MovieController(){
constructor(private readonly movieService: MovieService){}
@Patch(':id')
patchMovie(@Param('id', ParseIntPipe /* 파이프 적용 */) id: number, @Body() body: UpdateMovieDTO){
return this.movieService.update(id, body);
}
}
| 이름 | 설명 |
|---|---|
| ValidationPipe | 모든 Validation Annotation 을 적용 |
| ParseIntPipe | Int 값으로 변환, 검증 |
| ParseFloatPipe | Float 값으로 변환, 검증 |
| ParseBooleanPipe | Bool 값으로 변환, 검증 |
| ParseArrayPipe | Array값으로 변환, 검증 |
| ParseUUIDPipe | UUID 값으로 변환 , 검증 |
| ParseEnumPipe | Enum 값으로 변환 , 검증한다. |
| DefaultValuePipe | 기본값을 설정한다. |
| ParseFilePipe | 파일을 검증한다. |
@Injectable()
export class ParseIntPipe implements PipeTransForm<string, number>{
transform(value: string, metadata: ArgumentMetadata): number {
const val = parseInt(value, 10);
if(isNaN(val)){
throw new BadRequestException(
`validation Failed. ${val} is Not a Valid Number.`
)
}
return val;
}
}
기본제공되는
ParseIntPipe를 커스텀 pipe 로 만든다면 이런식으로 만들 수 있다.