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