개발/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 구현
- 해당 부분은 registerDecorator부분을 참조하면 쉽게 구현할 수 있다.
728x90
반응형