как убедиться, что хотя бы одно поле не пусто? (нормально, если только одно не пусто)

Я пишу конечную точку регистрации для API, над которым я работаю, и я использую nestjs и класс-валидатор для проверки входных данных. Пользователь может зарегистрироваться, используя либо свой номер телефона, либо адрес электронной почты, либо и то, и другое. Итак, чтобы проверить ввод, я должен убедиться, что предоставлен хотя бы один из них. Но мне сложно понять, как это сделать, не создавая беспорядка.

Это мой dto:

export class register {
  @ApiModelProperty()
  @IsNotEmpty()
  @IsAlpha()
  firstName: string

  @ApiModelProperty()
  @IsNotEmpty()
  @IsAlpha()
  lastName: string

  @ApiModelProperty()
  @ValidateIf(o => o.email == undefined)
  @IsNotEmpty()
  @isIRMobile()
  phone: string

  @ApiModelProperty()
  @ValidateIf(o => o.phone == undefined)
  @IsNotEmpty()
  @IsEmail()
  email: string

  @ApiModelProperty()
  @IsNotEmpty()
  password: string
}

Как видите, я использовал условную проверку, которая работает в тех случаях, когда указан только один номер телефона или адрес электронной почты. Но проблема в том, что, когда предоставлены оба, один из них не будет проверен и будет разрешено недопустимое значение.

Какие-либо предложения?


person massivefermion    schedule 30.06.2019    source источник


Ответы (1)


Я думаю тебе просто нужно добавить

@ValidateIf(o => o.email == undefined || o.phone)
phone: string

а также

@ValidateIf(o => o.phone == undefined || o.email)
email: string

ИЗМЕНЕНО

Небольшое дополнение

Я бы посоветовал проверить вот так:

@ValidateIf(o => !o.email || o.phone)
phone: string

@ValidateIf(o => !o.phone || o.email)
email: string

для правильной обработки null, 0 и "" (пустая строка)

в противном случае это тоже будет правильно (а не должно быть):

const data = new register();
data.phone = '';
data.email = '';
person Andrei Kamenskikh    schedule 01.07.2019