在 nestJS 中使用 class-validator 进行电子邮件验证

Email verification with class-validator in nestJS

我想做的是在有人试图使用已在使用的电子邮件注册时传播错误。默认情况下,这个 returns 是一个 500 错误,但我需要它为这个特定场景抛出一个有意义的错误。 注意:程序returns 500 error for every error

是的,可以使用 class-validator

验证电子邮件

首先,您需要像这样为此验证器创建自定义 class。

@ValidatorConstraint({ name: 'isEmailUserAlreadyExist', async: true })
    @Injectable()
    export class IsEmailUserAlreadyExistConstraint
      implements ValidatorConstraintInterface
    {
      constructor(protected readonly usersService: UsersService) {}
    
      async validate(text: string) {
        return !(await this.usersService.userExists({
          email: text,
        }));
      }
    }
    
    export function IsEmailUserAlreadyExist(validationOptions?: ValidationOptions) {
      return function (object: any, propertyName: string) {
        registerDecorator({
          target: object.constructor,
          propertyName: propertyName,
          options: validationOptions,
          constraints: [],
          validator: IsEmailUserAlreadyExistConstraint,
        });
      };
    }

然后你需要将这个class导入用户模块

providers: [UsersService, IsEmailUserAlreadyExistConstraint]

毕竟,您可以在 DTO 中使用这个自定义装饰器,您可以在其中传递自定义消息作为错误输出

  @IsEmailUserAlreadyExist({
    message: 'Пользователь с таким email уже существует',
  })
  readonly email: string;