Как проверять и обрабатывать форму в Express (NodeJS)

#forms #node.js #express

#формы #node.js #экспресс

Вопрос:

Существует ли предпочтительная библиотека обработки и проверки формы для Express?

Я действительно ищу тот же уровень абстракции, что и в Django forms, то есть проверку и сообщение об ошибках в шаблоне.

Если бы такую же проверку можно было использовать на стороне клиента, это было бы здорово.

Кто-нибудь использовал или написал что-нибудь хорошее?

Ответ №1:

Похоже, что для этого есть модуль, расположенный по адресу https://github.com/caolan/forms. Я никогда ею не пользовался, но она кажется довольно полнофункциональной.

Комментарии:

1. мне не нравится идея, что кто-то другой контролирует разметку моей формы.

2. @chovy: Вам следует более внимательно прочитать документ, а не уводить всех в неправильном направлении. Когда вы визуализируете свою форму с помощью form.toHtml() или field.toHtml(), вы можете передать пользовательский итератор в параметре. Итератор — это функция, которую toHtml будет использовать для отображения формы / поля. Вы можете создавать пользовательские виджеты, средства проверки, итераторы и многое другое…

3. Вы оба правы. Развивая то, что сказал @chovy, даже если вы передаете итератор, вы указываете, что форма должна быть отрисована с помощью .toHTML() . Вопреки этому и развивая то, что сказал @Jean-Philippe, вам на самом деле даже не нужно использовать .toHTML() , чтобы получить почти все, что вам нужно для работы с вашими формами (хотя потребовалось очень внимательное чтение документов, чтобы понять это).

Ответ №2:

Это также выглядит жизнеспособным и все еще разрабатывается: https://github.com/ctavan/express-validator

Вот пример проверки отправки формы (запрос post для входа в систему):

 exports.login.post = function(req, res){
  req.assert('username', 'Enter username').notEmpty();
  req.assert('password', 'Enter password').notEmpty();
  res.locals.err = req.validationErrors(true);

  if ( res.locals.err ) {
    if ( req.xhr ) {
      res.send(401, { err: res.locals.err });
    } else {
      res.render('login', { err: res.locals.err });
    }

    return;
  }

 //authenticate user, data is valid
};