체인의정석

class validator 사용하기, 다중 validation 처리하기 본문

개발/backend

class validator 사용하기, 다중 validation 처리하기

체인의정석 2021. 11. 9. 14:02
728x90
반응형

calss validator가 여태까지 제대로 작동하고 있지 않음을 체크하였다. 

 

그 이유는 @로 프로퍼티를 설정하고 나서 그 이후에 따로 객체를 만들어서 처리하는 부분을 안 써두었기 때문이다.

 

따라서 다음과 같은 로직을 추가하였다.

export class AddressesController {
  constructor(private readonly addressesService: AddressesService) {}
  @Get('contracts/:ethAddress')
  async findOne(
    @Param('ethAddress') ethAddress: string,
  ): Promise<GetContractResponse> {
    const getContractRequest = new GetContractRequest(ethAddress);
    const errors = await validate(getContractRequest);
    if (errors.length > 0) {
      throw new BadRequestException(errors);
    }
    const response = this.addressesService.getAddressType(getContractRequest);
    return response;
  }
}

위와 같이 validate를 해주어야 class validator가 작동한다.

 

가장 깔끔한 response를 주기 위해서는

 

import { IsEthereumAddress } from 'class-validator';

export class GetContractRequest {
  @IsEthereumAddress({
    message: 'Is invlaid eth address',
  })
  ethAddress: string;

  @IsEthereumAddress({
    message: 'Is invlaid eth address2',
  })
  ethAddress2: string;

  constructor(ethAddress: string) {
    this.ethAddress = ethAddress;
    this.ethAddress2 = ethAddress;
  }
}

위와 같이 여러개의 에러가 있다고 가정해보면

 

controller 부분에서 에러체크를 하고 결과값을 반환할 때 

이런 식으로 에러가 발생하기 때문에 , 이 배열을 map 을 이용하여 에러를 리턴해주는 새로운 배열로 다시 만들어서 응답하면 더 체계적인 응답이 가능해 보인다.

 

검사하는 변수가 여러개인 경우 이렇게 한번에 검사하여 결과 값을 보여주게 되면 더 깔끔하고 친절한 응답이지 않을까 싶다.

 

아무튼 요점은 class validator를 사용할때는 class를 생성하고 에러를 배열형태로 리턴받아서 예외처리를 해주자 이다.

728x90
반응형
Comments