What i'm trying to do is propagate an error when some one tries to sign up with an email that's already in use. By default this returns a 500 error, but i need it to throw a meaningful error for this particular scenario. Note: The program returns a 500 error for every error

1

1 Answer

Yes, this is possible to validate email using class-validator

First of all you need to create custom class for this validator like this for example.

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

Then you need to import this class to the users module

providers: [UsersService, IsEmailUserAlreadyExistConstraint] 

And after all, you can use this custom decorator in you DTO, where you can pass custom message as the error output

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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.