Как проверить значения флажков с помощью экспресс-валидатора?
В своей веб-форме я использую флажок, чтобы выбрать список компаний для каждой записи флажка, в качестве атрибута "value" я назвал название компании. В nodejs я использую экспресс-валидатор для проверки формы. Мне не ясно, как проверять и дезинфицировать пользовательский ввод для этих элементов флажка.
Я вижу все примеры экспресс-валидатора, использующего имя параметра формы для проверки конкретного параметра (например) check('userName') в качестве промежуточного программного обеспечения. Но для флажков конкретный параметр будет присутствовать только тогда, когда пользователь выберет этот параметр. Если у меня есть 10 вариантов, и пользователь выбирает только 4 из них, то req.body будет иметь только эти параметры. А также я хочу, чтобы все они проходили одинаковую проверку и дезинфекцию. Подскажите пожалуйста как это сделать.
Я использую версию NodeJS: 10.8 Экспресс-валидатор: 5.3.0 Мои значения флажков - company_a1,company_a2,...company_a10. Я попытался написать собственный Validator и проверить для каждого параметра body буквенно-цифровое значение, но проверка не вызывает ошибку, даже если значение содержит буквенно-цифровые строки
async function validateReportParams(body, { req, loc, rpath }) {
for (const par of Object.keys(req.body)) {
try {
check(req.body[par].isAlphanumberic());
} catch (err) {
return Promise.reject(err);
}
}
}
exports.genReport = [
validateReq,
param().custom(validateReportParams),
async (req, res, next) => { ... }
];
2 ответа
Мой ответ немного не связан с этим вопросом. но если вы хотите использовать необязательный флажок в своей форме. вы можете сделать что-то вроде этого
body('checkbox')
.customSanitizer(input => {
return Boolean(input)
})
Попробуйте использовать одно и то же имя для каждого флажка, чем применить isIn([])
проверить согласно: https://express-validator.github.io/docs/check-api.html
check(req.body.checkbox.isIn(['company_a1','company_a2',...,'company_a10']));