인터셉터는 양쪽에서 적용이 가능함
npm install class-validator class-transformer
import { ValidationPipe } from '@nestjs/common';
...
app.useGlobalPipes(
new ValidationPipe({
// 정의되지 않은 프로퍼티가 있으면 제거함
whitelist: true,
// 정의되지 않은 프로퍼티가 있으면 오류 발생
forbidNonWhitelisted: true,
// 데이터 타입이 다르면 오류 발생
transform: true,
}),
);
@ValidatorConstraint({ name: 'password' })
class PasswordValidator implements ValidatorConstraintInterface {
validate(value: any) {
return value.length > 4 && value.length < 10;
}
defaultMessage() {
return '비밀번호는 4자 이상 10자 이하여야 합니다. (현재 값: $value)';
}
}
...
@Validate(PasswordValidator)
test: string;
...
@Validate(PasswordValidator, {
message: '비밀번호는 4자 이상 10자 이하여야 합니다. (현재 값: $value)',
})
test: string;
@ValidatorConstraint({ name: 'password' })
class PasswordValidator implements ValidatorConstraintInterface {
validate(value: any) {
return value.length > 4 && value.length < 10;
}
defaultMessage() {
return '비밀번호는 4자 이상 10자 이하여야 합니다. (현재 값: $value)';
}
}
function IsPasswordValid(validationOptions?: ValidationOptions) {
return function (object: Object, propertyName: string) {
registerDecorator({
target: object.constructor,
propertyName,
options: validationOptions,
validator: PasswordValidator,
});
};
}
...
@IsPasswordValid()
test: string;