-
006_NestJS_Pipes를 활용한 Validation Check> Backend/NestJS 2022. 5. 16. 13:49
****** Pipe 진행 전, 접힌 글을 확인해주세요.
더보기========================================================================
우선, import {Controller, Get,Post} 에 더해, import {Body, Param} from '@nestjs/common' 를 import합니다.
만약 들어오는 Request Body에 데이터를 넣어서 오는 경우 Body를, Param에 데이터를 넣어서 오는 경우는 Param를 활용하면 된다.
createMessage 활용 방법 createMessage의 경우 POST를 활용해서, @Body에 데이터를 넣어서 보내줄 예정이기에, 아래의 사진과 같이 설정한다.
messages.controller.ts ========================================================================
이제, Pipes를 통해 validation check를 진행해봅시다.
본 글에서, 아래와 같은 순서로 Validation Check를 진행할 예정입니다.
Validation Pipe 순서 1) ValidationPipe를 main.ts에 설정하여 global 사용 가능하게 설정.
main.ts에서 ValidationPipe를 import하고, app.useGlobalPipes( new ValidationPipe())에서 해당 내용을 글로벌에서 사용할 수 있게 설정해주면 된다.
main.ts 이렇게 되면, 위 사진에서 new ValidationPipe()가 incoming Request에 대해 일일히 유효성 검사를 진행할 것입니다.
이제 어떤 방식으로 유효성 검사를 진행할 지 한번 만들어봅시다.
2&3) request가 가져야 할 properties를 선언해주는 Class 생성 → Data Transfer Object (DTO)라 칭함.
우선, src 내에, dtos 라는 디렉토리를 만들고, 그 안에, create-message.dto.ts라는 파일을 생성합니다.
이후, CreateMessageDto라는 이름을 가진 class를 생성하고, 안에 아래와 같이 작성합니다.
(Content가 string type이고, @IsString() 라는 decorator를 사용해서, string이 아닌경우 바로 탈출하고, error 발생)
해당 라인을 작성하면, class-validator라는 라이브러리가 없다고 에러가 날텐데, 해당 부분을 install 해주면 됩니다.
create-message.dto.ts terminal에 npm install class-validatior class-transformer 작성하면 됩니다. class-validator 이외에 class-transformer라는 라이브러리도 추가적으로 설치해줄 예정입니다.
4) 이제, Controller에서 incoming 되는 데이터를 Validation Check를 해주려고 하기 때문에, Controller 에 방금 만든 DTO를 import 해주시고, 사용할 부분에 CreateMessageDto로 변경해줍니다.
messages.controller.ts 저는 CreateMessage에서 String인지 확인하기위해 Pipes를 우선적으로 사용할 예정이기 떄문에, Any였던 부분을 CreateMessageDto로 변경해줍니다.
그러면, 이제 /message로 CreateMessage- Post 형식으로 들어오는 body는 애들은 String type으로 지정되기 때문에, 다른 데이터 ({content:123})를 보내면, 아래와 같이 에러가 발생되게 됩니다.
Content가 Number인 경우, 에러 중요하지 않치만, 좀 더 자세히 보기
더보기========================================================================
여기서, 중요하지는 않치만, 일전에 설치한 class-transformer는 어디에 쓰냐는 궁금증이 생길 수 있습니다.
데이터가 넘겨져 오면 class-tranformer가 해당 데이터를 DTO 로 변경해는데 사용되고, DTO로 변경된 데이터를 Class-validator를 사용해서 Validation-check를 진행하게 됩니다.
또한, TS에서 JS로 변환되는 과정에서 기본적으로는 Decorator까지 가져가지는 않치만, 일전에 tsconfig.ts에 작성된 아래 두코드가 이를 가능하게 해줍니다.
tsconfig.ts node_modules 내에있는, messages.controller.ts 전환되는 과정에서, node_modules안에있는 messages.controller.ts 내에 보시면( metatdata("design:paramtypes",[create_message_dto....), paramtypes가 create_message_dto라는 조건?을 가져야된다고 명시되어있습니다.
========================================================================
다음 장에는 Service 와 Repository를 통해서 Bussiness-Logic 과 DB에서 데이터 가져오는 것에대해 알아보겠습니다.
'> Backend > NestJS' 카테고리의 다른 글
009_TypeORM을 NestJS에 연결 - 1 (0) 2022.05.27 007_NestJS_Service 와 Repository (0) 2022.05.18 005_NestJS_NestJS CLI를 사용한 Controller 만들기 (0) 2022.05.16 004_NestJS_BasicSetup(using NestCLI) (0) 2022.05.16 003_NestJS_Scratch (0) 2022.05.16