DevBoi

[NestJS] 커스텀 파이프 개발 본문

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과 같은지 리턴하고 해당 값으로 에러 던짊의 기준을 정한다.

이렇다.

이렇게 확인할 수가 있다.

 

다음에는 디비 설치 및 연동을 진행해보자

 

반응형

'Develop > [NestJs]' 카테고리의 다른 글

[NestJs] TypeOrm 변경 및 Repository  (0) 2023.05.30
[NestJS] MariaDB , TypeOrm 세팅  (0) 2023.05.29
[NestJs] 예외 처리  (0) 2023.05.27
[NestJs] Pipes란?  (0) 2023.05.27
[NestJS] 게시물 CRUD  (0) 2023.05.27