라이프사이클

image.png

인터셉터는 양쪽에서 적용이 가능함

@Query, @Param , @body

Class Validator

npm install class-validator class-transformer

import { ValidationPipe } from '@nestjs/common';
...
app.useGlobalPipes(
  new ValidationPipe({
    // 정의되지 않은 프로퍼티가 있으면 제거함
    whitelist: true,
    // 정의되지 않은 프로퍼티가 있으면 오류 발생
    forbidNonWhitelisted: true,
    // 데이터 타입이 다르면 오류 발생
    transform: true,
  }),
);

custom validator

@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;

Relationships

image.png