使用 NestJS 中的类验证器进行电子邮件验证

0 email-validation class-validator nestjs

我想做的是当有人尝试使用已在使用的电子邮件进行注册时传播错误。默认情况下,这会返回 500 错误,但我需要它针对此特定场景抛出有意义的错误。注意:程序对于每个错误都会返回 500 错误

Fat*_*her 5

是的,可以使用类验证器来验证电子邮件

\n

首先,您需要为此验证器创建自定义类,例如这样。

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

然后需要将这个类导入到users模块中

\n
providers: [UsersService, IsEmailUserAlreadyExistConstraint]\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
  @IsEmailUserAlreadyExist({\n    message: \'\xd0\x9f\xd0\xbe\xd0\xbb\xd1\x8c\xd0\xb7\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb5\xd0\xbb\xd1\x8c \xd1\x81 \xd1\x82\xd0\xb0\xd0\xba\xd0\xb8\xd0\xbc email \xd1\x83\xd0\xb6\xd0\xb5 \xd1\x81\xd1\x83\xd1\x89\xd0\xb5\xd1\x81\xd1\x82\xd0\xb2\xd1\x83\xd0\xb5\xd1\x82\',\n  })\n  readonly email: string;\n
Run Code Online (Sandbox Code Playgroud)\n