У меня есть имена полей в таком массиве:
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*.*')
, чтобы проверить весь массив объектов, но только поля проблем, но это не сработает. Мне не удалось найти в Интернете подходящий шаблон подстановочных знаков для моего сценария. В документации тоже очень мало сказано.
чтобы проверить объект в массиве, используйте: *.key
а затем вы можете просто зациклить свои ключи и добавить их динамически:
const postRequiredFields = () => {
const validators = [];
baseFields.map((key) => {
const validator = body(`*.${key}`)
.exists(existsOptions)
.bail()
.isString();
validators.push(validator);
});
return validators;
};