NestJS Pipes

최진서·2023년 2월 17일
0

Pipe란

파이프는 @Injectable() 데코레이터로 주석이 달린 클래스

  • 파이프는 data transformationdata validation을 위해서 사용됨
  • 파이프는 컨트롤러 경로 처리기에 의해 처리되는 인수에 대해 작동

    Nest는 메소드가 호출되기 직전에 파이프를 삽입하고 파이프는 메소드로 향하느 인수를 수신하고 이에 대해 작동함

Data Transformation?

입력 데이터를 원하는 형식으로 변환

만약 숫자를 받길 원하는데 문자열 형식으로 온다면 파이프에서 자동을 숫자로 바꿔줌

Data validation?

입력 데이터를 평가하고 유효한 경우 변경되지 않은 상태로 전달하면 됩니다
그렇지 않으면 데이터가 올바르지 않을 때 예외를 발생시킴

만약 이름의 길이가 10자 이하여야 하는데 10자 이상 되면 에러를 발생시킴

PIPE 사용하는 법(Binding Pipes)

  1. Handler-level Pipes
  2. Parameter-level Pipes
  3. Global-level Pipes

Handler-level Pipes

핸들러 레벨에서 @UsePipes() 데코레이터를 이용해서 사용 할 수 있음
이 파이프는 모든 파라미터에 적용됨

Parameter-level Pipes

특정한 파라미터에게만 적용이 되는 파이프

Global Pipes

클라이언트에서 들어오는 모든 요청에 적용됨
가장 상단 영역인 main.ts에 넣어주면 됨

커스텀 파이프 구현 방법

PipeTransform이란?

인터페이스를 새롭게 만들 커스텀 파이프에 구현해주어야함
Pipe Transform 인터페이스는 모든 파이프에서 구현해줘야하는 인터페이스

  • 모든 파이프는 transform() 메소드를 필요
  • 이 메소드는 NestJS가 이자를 처리하기 위해서 사용됨

transform() 메소드

두개의 파라미터를 가짐
1. 처리가 된 인자의 값(value)
2. 인자에 대한 메타 데이터를 포함한 객체

transform()메소드에서 Return된 값은 Route 핸들러로 전해짐
만약 예외(Exception)가 발생하면 클라이언트에 바로 전해짐

참고자료

https://www.inflearn.com/course/%EB%94%B0%EB%9D%BC%ED%95%98%EB%8A%94-%EB%84%A4%EC%8A%A4%ED%8A%B8-%EC%A0%9C%EC%9D%B4%EC%97%90%EC%8A%A4/unit/87226?tab=curriculum

profile
Frontend developer

0개의 댓글