-
Nest.js Pipes(변환, 유효성 검사)FrameWork/Nest.js 2022. 7. 11. 17:15
Pipes
Pipes에는 2가지 사용사례가 있다.
- 변환 : 입력 data를 원하는 형식으로 변환할 경우 (예: 문자열에서 정수로)
- 유효성 검사 : 입력 data를 평가하고 유효하면 변경 없이 전달하지만 그렇지 않은 경우는 Exception을 발생시킨다.
Object 형태로 전달되는 @Param()
Object 의 속성을 @Param() 문자열 인자로 전달한 경우
ParseIntPipe를 이용하여 전달값 형변환
Pipe가 validation Error를 내는 경우
Pipes and Filters Pattern
일반적인 경우 유효성 검사
data가 들어왔을 때 즉 사용자가 Request를 했을 때 해당하는 메서드가 수행이 될 것이다. 이를 테면 그 data에 대해서 유효성 검사도 하고 변환도 수행하는 Task들이 하나하나 수행 될 것이다. 그 이후에 data를 하나 겉쳐서 실제 원하는 Logic이 실행 될 것이다. 위 그림과 같은 과정을 겉치는 것이 일반적인 함수의 유효성 검사라고 생각하면 된다.
Pipe pattern의 경우
사용자의 의한 특정한 어떤 data 구체적으로 parameter같은 data가 pipe를 통해 들어온다. 그 data의 대해 우선 Task A를 시행한다. 그리고 그 Task A가 적용된 data를 다시 pipe에 넣는다.
그리고 그 pipe가 연결된 Task B에 의해 추가적인 변환 또 는 유효성 검사가 일어나는 데 만약 Task B에서 유효성 검사에 통과를 하지 못한다면, 그 과정에서 바로 Exception이 발생이 되서 Task Chain 과정에서 탈출해서 Error를 반환하게 된다.
여러 pipe의 Task 검사와 변환을 모두 통과해 data 가공 과정을 거치면, 그제서야 Business Logic에 들어서 실행될 data의 자격을 얻는 것이다. 이런 식으로 시행이되는 것을 pipe pattern이라고 한다.
Custom Pipe 만들기
PositiveInt Pipe
역할 : parameter가 해당 pipe를 겉치면 무조건 정수형태를 띄게된다. float형으로 들어오면 int형으로 변환
PipeTransform을 구현한다. 이 구현체에서는 transform이라는 메서드를 구현해야한다. 이 함수의 결과 값이 pipe의 결과 값이 되는 것이다. 위 그림에서 본 Task A,Task B등이 바로 각각 Pipe class마다 정의된 transform 메서드이다.
PositiveIntPipe 붙이기
@Param 데코레이터를 통해서 넘어오는 인자는 위 코드 처럼 여러 Pipe를 통해서 이어 붙일 수 있다. 붙어 있는 pipe를 쭉 타고 가서 최종 data인 id가 getCurrentCat안으로 전달 되는 것이다.
'FrameWork > Nest.js' 카테고리의 다른 글
Multer와 미디어 파일 서비스(img,mp3,mp4) 1 (0) 2022.07.30 Nest.js Intercepters(AOP 패턴) (0) 2022.07.24 Nest.js Exception Filter (0) 2022.07.11 Nest.js Logger Middleware(provider,consumer) (0) 2022.07.10 Nest.js-TypeOrm 관계 (0) 2022.07.07