Email Verification with Class-Validator in nestJS

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

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.

Chloe Bennett

Chloe Bennett

Culture, Media & Entertainment Columnist

Chloe Bennett explores the intersection of pop culture, streaming entertainment, digital trends, and contemporary lifestyle. Her weekly commentary reaches thousands of culture enthusiasts.

Share this article
Twitter Facebook Pinterest