Использование проверки цепочки для проверки наличия дополнительных полей с помощью Express Validator - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь проверить наличие необязательного поля в запросе API и, если это поле существует, выполнить вложенную проверку, чтобы проверить, существуют ли внутри него два других поля (одно или другое, или неявно оба),Я использую Express Validator, чтобы попытаться выполнить эту задачу.

// Sample request body
{
  <...>
  thresholds: {
    min: 3,
    max: 5
  }
}

// (Attempted) validation chain
check('thresholds').optional()
      .custom( innerBody => {
          console.log('THRESHOLDS', innerBody);
          oneOf([
              check('innerBody.min').optional(),
              check('innerBody.max').optional()
          ]);
      })

Приведенный выше фрагмент является частью большой цепочки проверки, в которой я проверяю полное тело запроса. Я также попытался удалить строку innerBody. из внутренних check s, но все равно не повезло. Я console.log набираю тело порога, и оно распечатывается правильно, однако я все еще получаю ошибку проверки, когда пытаюсь пройти мой интеграционный тест:

{"name":"ValidationError","message":"ValidationError: Validation failed","errors":[{"location":"body","param":"thresholds","value":{"min":3,"max":5},"msg":"Invalid value"}]}

Я относительно новыйExpress Validator, так что, если я неправильно проверяю правильность цепочки / неправильно использую oneOf или что-то может понравиться некоторым указателям!

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Помните: всегда возвращайте логическое значение из обратного вызова функции .custom (). В противном случае проверка может работать некорректно.

Источник: Настраиваемое руководство по проверке

Как правило, у вас могут возникнуть потребности в использовании Обещаний , если вы имеете дело с асинхронной функцией .custom(). Тогда вы будете обязаны вернуть Promise.resolve() / Promise.reject() для правильного поведения валидатора.

Источник: SO ответ

0 голосов
/ 09 октября 2019

Похоже, что функция .custom должна возвращать Promise. Ответ ниже:

.custom(innerBody => {
            if (!(innerBody.min) || !(innerBody.max)) return Promise.reject('Missing min or max');
            return Promise.resolve();
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...