개발/Node & Javascript

[Nest.js] class validator 관련 tip

말고기 2023. 2. 14. 00:08
728x90
반응형

개요

  • class validator관련 tip들을 정리해보려고 한다.
  • 기본 type checking에 대해서는 잘 활용할꺼라서 여러가지 변형에 대한 케이스들을 적어보려고 한다.
  • 이외에도 class validator에서는 다양한 기능들을 제공하므로 문서를 참조해보자

1. ValidateIf

  • 특수한 decorator라 별도로 추가했다.
  • 해당 validation을 진행할지 여부를 별도로 조건을 설정 가능하다.
  • 예를 들어서 아래와 같이 public한 feed에 대해서 반드시 tag입력이 필요할 경우 아래와 같이 설정할 수 있다.
export class FeedRequest {

  @IsOptional()
  @IsBoolean()
  isPublic?: boolean;

  @ValidateIf((r) => r.isPublic ?? false)
  @IsString()
  readonly tag?: string;
}

2. Length, MinLength, ArrayMinSize

  • 해당 부분은 이름에서 짐작하듯이 string의 길이 또는 array의 size를 조절할 수 있다.
  • 일반적으로 length는 string 관련이고, array가 붙으면 array 기반으로 size를 체크한다.
  • 이렇게 적어놓은 이유는 length랑 size의 동작이 가끔 헷갈릴 때가 있어서 주의하자는 차원에서 적어두었다.

3. ValidationOptions

  • 따로 decorator에 대해 설명하는 것은 아니고, 각각의 constraints에 대해서 message를 커스터마이즈가 가능하다.
  • 이외에도 context를 셋팅하거나 할 수 있으므로 참고하자.
  • 예를 들어서 아래의 경우에는 errorCode를 client에 노출시키기 위해서 별도로 활용하기 위해서 아래와 같이 code를 넣어주는 것이 가능하다. (해당 부분은 별도로 ErrorFilter에서 별도로 잡아주거나 customize가 필요하다. 다만 그 구현은 여기의 내용에서 벗어나므로 다루지 않는다.
export class UpdateProfileRequest {
  @IsOptional()
  @Length(9999, 99999, { context: { code: 'INVALID_PASSWORD_LENGTH' } })
  readonly password?: string;
}

4. 별도 decorator 구현

728x90
반응형