#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
};