JS/Nest.js
[Nest JS] 커스텀 파이프 구현 => 유효성 체크
Mini_96
2024. 8. 17. 21:16



* 구현
import { ArgumentMetadata, PipeTransform } from "@nestjs/common";
export class BoardStatusValidationPipe implements PipeTransform{
transform(value: any, metadata: ArgumentMetadata): any {
console.log('val',value);
console.log('meta data', metadata);
return value;
}
}
컨트롤러에서
매개변수 검사용 파이프라인을 넣으면됨.
@Patch('/:id/status') //수정은 patch
updateBoardStatus(@Param('id')id:string, @Body('status', BoardStatusValidationPipe) status:BoardStatus){
return this.boardsService.updateBoardStatus(id,status);
}
* value, metadata가 무엇인가?

value : dfgdfs
metadata : [function: String] , type : body , data : status

* 문제 : 상태는 private, public 만 와야함

* 해결 : 커스텀 파이프 구현
import { ArgumentMetadata, BadRequestException, PipeTransform } from "@nestjs/common";
import { BoardStatus } from "../board.model";
export class BoardStatusValidationPipe implements PipeTransform{
transform(value: any, metadata: ArgumentMetadata): any {
value = value.toUpperCase();
if(!this.isStatusValid(value)){
throw new BadRequestException('${value} isn`t in the status options');
}
return value;
}
//get 전용 멤버변수
readonly StatusOptions=[
BoardStatus.PUBLIC,
BoardStatus.PRIVATE
];
private isStatusValid(status: any) {
const index = this.StatusOptions.indexOf(status);
return index !== -1 ;
}
}

