Как валидировать массивы/объекты в экспресс-валидаторе с помощью body(), проверяя только указанные поля?

У меня есть имена полей в таком массиве:

const baseFields = [
'employeeNumber',
'firstName',
'lastName',
'trEmail',
'position'
];

Это поля ввода, о которых мне нужно только заботиться.

В теле запроса я получаю массив объектов. Пример:

   {employeeNumber: 12343,
    firstName: Will,
    lastName: Smith,
    trEmail: [email protected],
    position: Actor,
    salary: low
    },
    
    {employeeNumber: 12344,
    firstName: Chris,
    lastName: Rock,
    trEmail: [email protected],
    position: stuntman,
    salary: ''
    }

Я хочу проверить этот массив только с соответствующими полями в массиве baseFields.

Это мой текущий код валидатора. Я узнал, что могу использовать подстановочные знаки для проверки массивов.

const existsOptions = {
    checkNull: true,
    checkFalsy: true
};

const postRequiredFields = () => {

    const validators = [];

    const validator = body('*.*')
    .exists(existsOptions)
    .bail()
    .isString();
    validators.push(validator);
    
    return validators;
};

Использование этого const validator = body('*.*') проверит все поля в массиве объектов в теле. Так как я могу получить это сообщение:

{ value: '',
  msg: 'Invalid value',
  param: '[1].salary',
  location: 'body' }

Видите, поле salary проверяется. Он вернул недопустимое значение, так как второй индекс в массиве имеет зарплату, установленную на '' или пустую. Но опять же, поле зарплаты не является одним из полей, которые мне нужно проверять.

Итак, я попробовал что-то вроде этого body('baseFields*.*'), чтобы проверить весь массив объектов, но только поля проблем, но это не сработает. Мне не удалось найти в Интернете подходящий шаблон подстановочных знаков для моего сценария. В документации тоже очень мало сказано.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

чтобы проверить объект в массиве, используйте: *.key

а затем вы можете просто зациклить свои ключи и добавить их динамически:

const postRequiredFields = () => {

    const validators = [];

    baseFields.map((key) => {
        const validator = body(`*.${key}`)
            .exists(existsOptions)
            .bail()
            .isString();
        validators.push(validator);
    });

    return validators;
};

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