在nestJS中使用类验证器进行电子邮件验证



我想做的是传播一个错误,当有人试图注册一个已经在使用的电子邮件。默认情况下,它返回一个500错误,但我需要它抛出一个有意义的错误对于这个特定的场景。注意:对于每个错误

,程序返回一个500的错误。

是的,可以使用class-validator

验证电子邮件首先,您需要为这个验证器创建自定义类,例如:

@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,
});
};
}

然后你需要把这个类导入到users模块

providers: [UsersService, IsEmailUserAlreadyExistConstraint]

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

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

最新更新