Как проверить значения флажков с помощью экспресс-валидатора?

В своей веб-форме я использую флажок, чтобы выбрать список компаний для каждой записи флажка, в качестве атрибута "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']));
Другие вопросы по тегам