Pipe단에서 추가되는 내용이다. Pipe단에 다 다루기엔 볼륨이 좀 커서 따로 빼서 알려주고자 한다. NestJS에는 어노테이션을 이용하여 쉽게 유효성 검사기능을 추가할 수 있는 방법이 존재한다.
설치
#npm
$ npm i -s class-validator class-transformer
# yarn
$ yarn add class-validator class-transformer
Nest에서 제공하는 ValidatePipe를 전역으로 적용한다.
이때 주의 할점은 class-transformer가 적용되기 위해서 transform 속성을 true로 주어야 한다.
main.ts
...
app.useGlobalPipes(
new ValidationPipe({
transform: true,
}),
);
...
공식 사이트에 서술 된 걸 정리해보겠다. (자주 쓰는건 ★ )
auto-transformation 기능 사용여부
false의경우 요청으로 들어오는 body를 클래스 인스턴스로 변환하여 검증이 안된다.
클라이언트에 반환 될 에러 메세지 사용여부 (default:false)
유효성검사가 일치 하지 않았을때 나타낼 메세지의 사용여부
true로 할경우 유효성검사에서 undefined값을 가진 개체는 유효성 검사를 건너뜀
true로 할경우 유효성검사에서 null값을 가진 개체는 유효성 검사를 건너뜀
true로 설정 할 경우 undefind혹은 null값을 가진 개체는 유효성 검사를 건너뜀
true로 설정하면 유효성 검사 decorator가 붙어 있지 않는 속성은 건너 뜀
true로 설정하면 whitelist에 걸리는 개체가 있을 경우 예외를 반환함
ture 알수 없는 개체의 유효성 검사를 할 경우 에러를 반환함
오류 발생 시 쓰일 예외 유형을 지정할 수 있다.
유효성 검사 예외 개체를 배여롤 반환한다.
true로 설정하면 유효성 검사에서 기본메세지를 사용하지 않음
대상이 노출 되어야 하는지 여부를 나타냄
대상의 값이 노출되어야 하는지 여부를 나타냄
true로 설정하면 첫번째 유효성 오류 이후 검사가 중지됌 default:false
예제
@IsString()
@MinLength(1)
@MaxLength(24)
name: string;
@IsString()
@IsEmail()
@MaxLength(128)
email: string;
@IsString()
@Matches(/^[A-Za-z\d!@#$%^&*()]{8,48}$/)
password: string;
너무 많은 데코레이터를 지원하기 때문에 자주 쓰는 것만 알아보자.
@IsString() 문자열인지 검증
@IsInt() Int값인지에 대한 검증
@IsBoolean() Boolean값인지에 대한 검증
@IsEmail() 이메일 형식인지에 대한 검증
@IsArray() 배열 값인지에 대한 검증
@IsEnum() Enum값인지에 대한 검증
@IsNumber() 숫자값인지에 대한 검증(소숫점도 검증 가능)
@IsDate() 날짜값인지에 대한 검증
@Contains() 해당 문자가 포함되어 있는지 검증
@IsBase64() Base64 값인지에 대한 검증(토큰 처리를 Base64로 했을시 사용)
@IsOptional() 값이 들어오지 않으면 검증을 안해도 된다는 데코레이터
@MaxLength() 최대 길이 제한
@MinLength() 최소 길이 제한
@IsFQDN() 사이트 링크 형태 (https://velog.io/artlogy)
@Allow() whitelist 옵션을 true했는데 딱히 적당한 데코레이터가 없을경우 쓰임
@Length() 길이 제한
@Matches(RegExp('^[가-힣a-zA-Z0-9]*$'), {message : "입력 값을 다시 확인하세요"}) 정규표현식 입력 값을 검증할 떄 사용
@Min() 최솟값
@Max() 최댓값
더 많은 데코레이터는 공식 사이트에서 보면 된다.