-
[m1 맥북] - nest.js 공부하기 16. 커스텀 파이프를 이용한 유효성 검사Nest.js 2022. 5. 25. 22:48728x90
커스텀 파이프 구현 방법
먼저 PipeTransform이란 인터페이스를 새롭게 만들 커스텀 파이프에 구현해줘야 합니다. 이 PipeTransform 인터페이스는 모든 파이프에서 구현해줘야 하는 인터페이스입니다. 그리고 이것과 함께 모든 파이프는 transform() 메소드를 필요합니다. 이 메소드는 NestJS가 인자 (arguments)를 처리하기 위해서 사용됩니다.
1. 커스텀 파이프에 PipeTransform을 implements한다.
2. 모든 커스텀 파이프는 transform() 메소드가 필수.
boards/pipes/board-status-validation.pipe.js 생성
transform() 메소드
이 메소드는 두개의 파라미터를 가집니다.
첫번째 파라미터는 처리가 된 인자의 값(value)이며
두번째 파라미터는 인자에 대한 메타 데이터를 포함한 객체입니다.
transform()메소드에서 Return 된 값은 Route 핸들러로 전해집니다.
만약 예외(Exception)가 발생하면 클라이언트에 바로 전해집니다.transform메소드의 인자값 value와 meta에 어떤 값이 들어오는 실제로 보는게 이해가 빠르기 때문에 console.log로 출력해본다.
실제로 value 와 metadata값 콘솔로 찍어보기
1. 커스텀 파이프 생성
2. 게시물에 업데이트하는 핸들러에 커스텀 파이프 넣어주기
3. 포스트맨으로 요청보내기
핸들러에 커스텀 파이프 넣어주기
//boards.controller.ts
이전에는 핸들러 레벨에서 파이프를 사용하여 모든 파라미터에 적용 하였지만, 커스텀으로 만든 status파이프는 파라미터 레벨의 파이프로 생성.
@Body('stats', BoardStatusValidationPipe)
//postman요청 보내기
//콘솔로그 결과
결과를 보면 value값에 status값 kwkw가 출력되는걸 알 수 있고 metada에 type이 body이고 data가 status 즉 요청 설정들을 알 수 있다.
하지만, status에는 public과 private만 올 수 있기 때문에, 그것에 대한 예외 처리를 한다.
커스텀 파이프로 실제 기능 구현하기
구현 할 기능 : 상태(Status)는 PUBLIC과 PRIVATE만 올 수 있기 때문에 이외의 값이 오면 에러를 보내주겠습니다.
readonly class property
접두사(prefix) readonly는 속성을 읽기 전용으로 만드는 데 사용됩니다. 읽기 전용 멤버는 클래스 외부에서 액세스 할 수 있지만 해당 값은 변경할 수 없습니다.
//boards/pipes/board-status-validation.pipe.js
readonly prefix를 통해 읽기 전용 StatusOptions를 만들고 value값에 소문자가 들어올경우 자동으로 대문자로 만들어 주는 toUpperCase함수를 사용한 value값을 isStatusValid 함수를 통해 값이 유효하면 true 아닐경우 false를 리턴함 (indexOf 함수는 포함 하는지 체크하는 함수로 존재하지 않으면 -1값을 리턴함.)
결과( 정상 데이터 )
결과( 비정상 데이터 )
728x90'Nest.js' 카테고리의 다른 글
[m1 맥북] - nest.js 공부하기 18. TypeORM (0) 2022.05.28 [m1 맥북] - nest.js 공부하기 17. PostgresSQL 설치 (0) 2022.05.28 [m1 맥북] - nest.js 공부하기 15. 없는 게시물을 지우려 할 떄 결과 값 처리 (0) 2022.05.25 [m1 맥북] - nest.js 공부하기 14. 특정 게시물을 찾을 때 없는 경우 결과 값 처리 (0) 2022.05.25 [m1 맥북] - nest.js 공부하기 13. 파이프를 이용한 유효성 체크 (0) 2022.05.24