[TIL] Class Validator

vanLan·2025년 2월 23일
0

TIL

목록 보기
2/2

특성

  • TS Decorator를 사용해서 클래스를 검증.
  • 동기, 비동기 방식 모두 지원.
  • Class Validator 자체적으로 제공해주는 Validator들을 사용할 수 있음.
  • 커스텀 Validator를 쉽게 만들 수 있음.
  • 커스텀 에러 메세지를 반환 할 수 있음.

예제

class User {
  @IsNotEmpty()
  name: string;
  
  @IsEmail()
  email: string;
}

Class Validator에서 제공해주는 어떤 Validator든 검증하고 싶은 프로퍼티에 Decorator로 제공해주면 됨.


const user = new User();

user.name = '';
user.email = 'invalid-email';

validate(user).then(errors => {
  // 여기서 에러 반환
});

validate() 함수로 객체를 검증했을때 Class Validator에 부합하지 않은 값이 입력되었다면 해당되는 에러를 반환.


기본 제공 Class Validator

공통 Validator

  • @IsDefined
    • 해당 필드가 반드시 정의되어 있어야 함. (nullundefined 허용 X)
  • @IsOptional
    • 필드가 존재하면 유효성 검사를 수행, 없으면 통과.
  • @Equals(value)
    • 필드 값이 특정 값과 정확히 같아야 함.
  • @NotEquals(value)
    • 특정 값을 제외하고 입력 받고 싶을 때 사용.
  • @IsEmpty
    • 필드 값이 null, undefined, 빈 문자열 이어야 함.
  • @IsIn([...])
    • 필드 값이 지정된 List 중 하나여야 함.
  • @IsNotIn([...])
    • 특정(List 안의)값 들은 허용하지 않을 때 사용.

타입 Validator

  • @Isboolean()
    • 필드 값이 true 또는 false인지 검증.
  • @IsDate()
    • 필드 값이 Date 객체인지 검증.
  • @IsString()
    • 필드 값이 문자열 인지 검증.
  • @IsNumber()
    • 필드 값이 숫자 인지 검증. (소수 허용)
  • @IsInt()
    • 필드 값이 정수 인지 검증.
  • @IsArray()
    • 필드 값이 배열 인지 검증.
  • @IsEnum(EnumType)
    • 필드 값이 지정한 enum 타입 중 하나인지 검증.

숫자 Validator

  • @IsDivisibleBy(num)
    • 필드 값이 지정된 숫자로 나누어 떨어지는지 검증.
  • @IsPositive()
    • 필드 값이 양수 인지 검증.
  • @IsNegative()
    • 필드 값이 음수 인즈 검증.
  • @Min(num)
    • 필드 값이 지정된 최소값 이상 인지 검증.
  • @Max(num)
    • 필드 값이 지정된 최대값 이하 인지 검증.

문자 Validator

  • @Contains(value)
    • 필드 값이 특정 문자열을 포함하는지 검증.
  • @NotContains(value)
    • 필드 값이 특정 문자열을 포함하지 않는 지 검증.
  • @IsAlphanumeric()
    • 필드 값이 알파벳과 숫자만 포함하는지 검증.
  • @IsCreditCard()
    • 필드 값이 유효한 신용카드 번호 인지 검증.
  • @IsHexColor()
    • 필드 값이 유효한 16진수 색상 코드 인지 검증.
  • @MaxLength(num)
    • 필드 값의 최대 길이 제한.
  • @MinLength(num)
    • 필드 값의 최소 길이 제한.
  • @IsUUID(version?)
    • 필드 값이 유효한 UUID 인지 검증.
  • @IsLatLong()
    • 필드 값이 유효한 위도(lat), 경도(lng) 형식인지 검증.

반환 에러 구조

  target: Object;
  property: string;
  value: any;
  constraints?: {
    [type: string]: string;
  }
  children?: ValidationError[];
  • target: 검증한 객체
  • property: 검증 실패한 프로퍼티
  • value: 검증 실패한 값
  • constraints: 검증 실패한 제약 조건
  • children: 프로퍼티의 모든 검증 실패 제약 조건

커스텀 에러 메세지

class User {
  @IsNotEmpty({
    messasge: '이름을 입력해주세요!'
  })
  name: string;
}
  • Decorator의 message 프로퍼티에 검증 실패했을 때의 에러 메세지를 입력해 줄 수 있음.
profile
프론트엔드 개발자를 꿈꾸는 이

0개의 댓글

관련 채용 정보