Экспресс-валидатор 5.2.0 - Проверка массива объектов подстановочных знаков - Сравнить - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь проверить массив объектов с помощью экспресс-валидатора.

Я использовал новый «подстановочный знак» вместе с «пользовательским» для перебора массива объектов, сравнивая ключи на объекте.

Вот проблема, допустим, мой объект выглядит так:

flavors:[
 { name: '', percentage: '0', ratio: '0' },
 { name: 'Strawberry', percentage: '2', ratio: '0' },
 { name: '', percentage: '3', ratio: '0' }
]

Как мне проверить, существует ли «имя», если «процент> 0»?

req.checkBody("flavors","Your recipe has no flavor!").notEmpty();
req.checkBody("flavors.*","Please enter a name for this flavor.").custom(function (value) {
    return (!(value.percentage > 0) && !value.name);
});

Это работает, но вывод "ошибки" будет выглядеть примерно так:

{ 'flavors[2]': { 
     location: 'body',
     param: 'flavors[2]',
     msg: 'Please enter a name for this flavor.',
     value: { name: '', percentage: '3', ratio: '0' }
}}

Что затрудняет отображение в моем шаблоне EJS.

Как сделать так, чтобы вывод выглядел примерно так с добавленным ключом?

{ 'flavors[2].name': { 
     location: 'body',
     param: 'flavors[2].name',
     msg: 'Please enter a name for this flavor.',
     value: { name: '', percentage: '3', ratio: '0' }
}}

Надеюсь, кто-нибудь может мне помочь, спасибо! : -)

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

На данный момент это можно сделать также

req
.checkBody("flavors","Please enter a name for this flavor.")
.custom(data => 
   Array.isArray(data) 
      && 
   data.length 
      && 
   data.every(item => item.name && item.percentage > 0));

Надеюсь, это поможет :)

0 голосов
/ 02 июля 2018

В настоящее время это не поддерживается изначально, но может быть частично доступно, когда эта проблема будет реализована.

На данный момент, с некоторой помощью Лодаша _.toPath(), вы можете достичь этого:

req.checkBody('flavors.*.name').custom((name, { req, location, path }) => {
  const index = _.toPath(path)[1];
  const { percentage } = req[location].flavors[index];

  // If percentage is 0, then it's always valid.
  return percentage > 0 ? name !== '' : true;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...