在 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;
我想做的是在有人试图使用已在使用的电子邮件注册时传播错误。默认情况下,这个 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;