//match.decorator.ts
class-validator에 있는 공식 문서에 있는 대로 썻다.
import { registerDecorator, ValidationArguments, ValidationOptions } from 'class-validator';
export function IsEqualTo(property: string, validationOptions?: ValidationOptions) {
return (object: any, propertyName: string) => {
registerDecorator({
name: 'isEqualTo', //아무거나 써도 되는 거같다.
target: object.constructor,
propertyName,
constraints: [property],
options: validationOptions,
validator: { //검증 validate는 무조건 실행된다
validate(value: any, args: ValidationArguments) { //검증에 성공했을떄
console.log(value) //ConfirmPassword의 값이 들어가있다.
const [relatedPropertyName] = args.constraints; //args.constraints == ["password"]
const relatedValue = (args.object as any)[relatedPropertyName];
return value === relatedValue; //password와 ConfirmPassword의 값이 같으면 통과한다.
},
defaultMessage(args: ValidationArguments) { //검증에 실패했을떄(password와 ConfirmPassword의 값이 않을떄)
const [relatedPropertyName] = args.constraints;
return `${propertyName} must match ${relatedPropertyName} exactly`; //오류 메세지를 반환한다.
},
},
});
};
}
import { IsBoolean, IsEmail , IsOptional, IsString, MinLength } from "class-validator";
import { IsEqualTo } from "src/decorators/match.decorator"; //위에 있는 파일 경로이다
export class CreateAuthDto {
@IsEmail()
email : string
@IsString()
@MinLength(5,{message : "5글자 이상 입력해주세요"})
Password : string
@IsString()
@IsEqualTo("Password") //비교할 것을 넣어주면 된다.
ConfirmPassword : string
@IsBoolean()
@IsOptional()
privilege : boolean
}
'TypeScript' 카테고리의 다른 글
Interceptor (0) | 2023.12.22 |
---|---|
Everyday Types (0) | 2023.12.20 |
자동 재시작 & 자동 컴파일 .js생성 (1) | 2023.12.02 |