개발/backend(js,ts)
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
반응형