Develop/[NestJs]
[NestJS] 커스텀 파이프 개발
HiSmith
2023. 5. 27. 18:17
반응형
자바랑 살짝 비슷하게 생겼는데
커스텀 파이프는 PipeTranform을 구현해야 하고, 하위 transform()메소드를 구현해야한다
import { ArgumentMetadata, PipeTransform } from "@nestjs/common";
export class BoardStatusValidationPipe implements PipeTransform
{
transform(value: any, metadata: ArgumentMetadata) {
console.log(value)
console.log(metadata)
return value;
}
}
@Patch('/:id/status')
updateBoardStatus(
@Body('status',BoardStatusValidationPipe) status : BoardStatus,
@Param('id') id: string)
{
return this.boardService.updateBoardStatus(id,status);
}
로그는 이렇게 찍힌다. 메타데이터는 저렇다.
해당 메타데이터와 value에 대한 값을 알았으니, 내 맘대로 커스텀 해서 예외를 던지던 할수 있다
만약에 status가 이상한 값이라면? 정해진 형식이 아니라 이상한 값이 들어온다면 에러로 리턴해야한다.
이 경우에 쓰면 유용하다.
자 그러면 정해진 State만 쓸수있게끔 파이프를 구현해보자
import { ArgumentMetadata, BadRequestException, PipeTransform } from "@nestjs/common";
import { BoardStatus } from "../board.model";
export class BoardStatusValidationPipe implements PipeTransform
{
readonly StatusOption = [
BoardStatus.PRIVATE,
BoardStatus.PUBLIC
]
transform(value: any, metadata: ArgumentMetadata) {
if(!this.isVaildStatus(value))
throw new BadRequestException(`${value}) is nope!`);
return value;
}
private isVaildStatus(status: any){
const index =this.StatusOption.indexOf(status);
return index !== -1;
}
}
readonly 선언자로, 특정 배열에 값이 없으면 INDEXOF의 값으로 -1과 같은지 리턴하고 해당 값으로 에러 던짊의 기준을 정한다.
이렇다.
이렇게 확인할 수가 있다.
다음에는 디비 설치 및 연동을 진행해보자
반응형