Экспресс-валидатор не ловит ошибки

В узле 8.11.1 экспресс 4.16.3 я установил

"express-messages" : "*",
"connect-flash" : "*",
"express-validator" : "*",
"express-session" : "*"

У меня есть страница, которая получает все статьи app.get('/', function(req, res){...., а также имеет кнопку «Новая» для добавления новой статьи. При нажатии New появляется всплывающая форма Bootstrap.

Я хочу проверить наличие пустых полей формы. Поле формы HTML, которое я проверяю,

          <input type="text" name="name" id="name" class="form-control" />

Действие формы переходит к

const { check, validationResult } = require('express-validator/check');
app.post('/add', [check('name').exists()],
function(req, res) {
  const errors = validationResult(req);
  console.log(errors.isEmpty());
  if (!errors.isEmpty()) {
    req.flash('err', 'errors'); //test
    res.redirect('/');
   }
   else {
     pool.connect(function(err, client, done) {
       if (err) {
         return console.log('db connect error '+ err);
       }
       client.query('insert into event (name) values($1)',
       [req.body.name]);
       done();
       req.flash('success', 'saved');
       res.redirect('/');
     }); //pool connect
   }//else
});

Я нахожусь в этом. Что бы я ни делал, console.log(errors.isEmpty()); всегда ИСТИНА, поэтому в итоге я сохраняю пустые поля в БД. Значит, экспресс-валидатор не ловит ошибки?

Кроме того, я не уверен, как передать errors обратно в маршрут /, чтобы ошибки могли быть отображены, поэтому я пока просто использую req.flash('err', 'errors');. Я использую req.flash как часть успеха?

Пожалуйста, помогите мне отладить это. Спасибо


person codebot    schedule 09.05.2018    source источник
comment
Каково значение объекта ошибок после запуска validationResult(req)?   -  person Elliot Blackburn    schedule 09.05.2018
comment
@ElliotBlackburn Это то, что console.log дает { isEmpty: [Function], array: [Function], mapped: [Function], formatWith: [Function], throw: [Function] }   -  person codebot    schedule 09.05.2018


Ответы (1)


сопровождающий экспресс-валидатора здесь.

Что касается экспресс-валидатора, пропускающего пустые строки

check() создаст цепочку валидаторов для что-то в запросе с именем name.
Это не указывает на расположение поля, это может быть, например, req.query.name или req.body.name.
Если вы хотите именно req.body, тогда используйте другого создателя цепочки body().

Затем, даже если у вас есть name в req.body, обратите внимание, что check('name').exists() не проверяет его содержимое. Это просто проверка его существования, как следует из названия.
Если вы хотите проверить, есть ли у него какой-то контент, каким бы он ни был, вы можете использовать check('name').not().isEmpty().

По поводу передачи ошибок на перенаправленную страницу

Вы можете позвонить по errors.array() или errors.mapped(), чтобы получить фактические ошибки (пожалуйста, проверьте Validation Chain API для подробностей).

Я не использовал req.flash, поэтому вам следует проверить, можете ли вы передать туда JS-объект или можете передавать только строки. Если вы должны использовать строку, то JSON.stringify/JSON.parse должны быть вашими друзьями для переноса ваших ошибок.

person gustavohenke    schedule 10.05.2018