NestJs에서 요청에 대한 유효성 검사를 할때
class-validator, class-transformer에서 validationPipe를 제공해주어 유효성 검사를 할 수 있다.
https://github.com/typestack/class-validator#usage
이렇게 기본적으로 제공되는 class-validator의 데코레이터가 아닌 custom Validator를 만들어서 사용할 수도 있다 !
*커스텀 데코레이터 만들기
그럼 이메일을 입력받는데 메일 주소의 도메인을 검증해보자 !
// validator를 만들어서 사용할 수도 있음 -> ValidatorConstraintInterface를 implement 해야함
@ValidatorConstraint()
class emailAddressValidator implements ValidatorConstraintInterface{
// validate() 와 defaultMessage() 를 사용하면됨.
validate(value: any, validationArguments?: ValidationArguments): Promise<boolean> | boolean {
if(typeof value !== 'string') return false;
return value.endsWith('@naver.com');
}
defaultMessage(validationArguments?: ValidationArguments): string {
return '메일 주소의 도메인은 @naver.com 이어야합니다. 입력된값 : ($value)'
}
}
그리고 dto의 email 프로퍼티에
구현해둔 class를 @Validate 데코레이터의 첫번째 파라미터로 입력하면 데코레이터 적용이 된다
@Validate(emailAddressValidator)
email: string;
요청을 보내봄.
검증이 잘됨.
그리고 이렇게 사용할수도 있지만
나만의 데코레이터 이름을 만들어서 사용하고 싶다면
'registerDecorator()'함수로 한번 감싸주면 됨 !
function IsEmailValidate(validationOptions?: ValidationOptions){
return function(object: Object, propertyName: string) {
registerDecorator({
// target, propertyName, options는 default로 작성해줘야 하는 값임
target: object.constructor,
propertyName,
options: validationOptions,
validator: emailAddressValidator // 만들어둔 클래스를 validator에 입력
});
}
}
이렇게 function IsEmailValidate()를 생성하였고
이제 @IsPasswordValid 라는 데코레이터로 바로 사용이 가능하다.
그리고 @IsPasswordValid 의 파라미터로 validationOptions를 전달하여 사용할 수도 있음 !
@IsEmailValidate()
email: string;
구글 도메인으로 요청을 날려보면
유효성 검증이 잘 되는것을 확인할 수 있다.
'framwork > NestJs' 카테고리의 다른 글
[NestJS] Queue 사용하기 (Redis) (0) | 2024.12.26 |
---|---|
[Nestjs] multer로 이미지 파일 업로드하기 (2) | 2024.11.19 |
[NestJS] LifeCycle (생명주기) (1) | 2024.07.02 |
[NestJS] Circular dependency (순환참조) 문제 해결 (0) | 2024.02.07 |