Как сделать условную проверку экспресс-валидатора 5.3.0?

export function valUPM() {
  return (req: Request, _res: Response, next: NextFunction) => {
    req
      .checkBody(
        "paymentType",
        `paymentType: ${messages.getFromSession(req, "mustNotBeEmpty")}`
      )
      .notEmpty();
    if (req.body.paymentType === "USP") {
      req
        .checkBody(
          "storeId",
          `storeId: ${messages.getFromSession(req, "mustNotBeEmpty")}`
        )
        .notEmpty();
    } else if (req.body.paymentType === "CC") {
      if (req.body.register) {
        req
          .checkBody(
            "register",
            `register: ${messages.getFromSession(req, "mustBeBoolean")}`
          )
          .isBoolean();
      } else {
        req
          .checkBody(
            "register",
            `register: ${messages.getFromSession(req, "mustNotBeEmpty")}`
          )
          .notEmpty();
      }
    }
    req.getValidationResult().then(errs => {
      if (errs.isEmpty()) {
        return next();
      }
      const error = new BFFError(
        400,
        "BadRequest",
        1,
        errs.array().map(error => {
          return { [error.param]: error.msg };
        })
      );
      return next(Error(JSON.stringify(error)));
    });
  };
}

После перехода на API, как реализовать этот тип логики в экспресс-валидаторах

Вызов req.checkBody или требуемой функции проверки внутри цикла if сделал трюк, как показано выше, но после изменения в API, как это можно реализовать, я попытался обойти проверку paymentTYpe как пользовательского валидатора и реализовать проверки и выдать сообщение внутри пользовательского валидатора, но ключи меняются.

Используя текущий APi, что является правильным способом сделать это, так как это будет полезно для всех людей, которые хотят обновить версию 3.0.0 до API экспресс-валидатора.

1 ответ

Решение

Поддержка условной валидации пока отсутствует в экспресс-валидаторе v5.x.x, но это скоро.
Вот запрос на извлечение, если вы хотите высказать свое мнение об API: https://github.com/express-validator/express-validator/pull/658

Тем не менее, обратите внимание, что устаревший API (тот, который использует req.checkBody(), req.getValidationResult() и т. д. еще не был удален из экспресс-валидатора.

Вы можете продолжать использовать его в v5.x.x так же, как вы бы в v3.x.x, Это просто не рекомендуется делать, поскольку это устарело и может быть удалено, когда выйдет версия 6 (пока нет!).

Все документы здесь, рядом с новыми документами API.

Отказ от ответственности: я поддерживаю экспресс-валидатор.

Другие вопросы по тегам