我是新的没有NodeJS,ExpressJS和Jade。我正在使用express-validator
来验证表单。
路线:
req.assert('firstName', 'Name is required').notEmpty();
req.assert('lastName', 'Name is required').notEmpty();
req.assert('email', 'A valid email is required').isEmail();
var errors = req.validationErrors();
....
if (errors){
res.render('users/new', {
errors: errors
});
}
....
在Jade
中,显示错误:
- if (errors)
div.alert.alert-error
ul
- each error in errors
li= error.msg
以上代码有效。我希望输入值保留在表单中,以便用户不要再输入它。
input#name(type="text", name="name", value="?")
如何?
由于
答案 0 :(得分:4)
您可以简单地将值放回渲染视图并将其插入到输入标记中。
if (errors) {
res.render('users/new', {
errors: errors,
firstName: firstName,
...
});
}
并在玉模板中放
input#name(type="text", name="firstName", value="#{firstName}")
或
input#name(type="text", name="firstName", value= firstName)
这取决于你的个人风格。
最好定义person.first
,person.last
和person.email
等值,因为您只能将person
放入渲染视图中。
答案 1 :(得分:1)
您的users/new.js
文件
var body = req.body;
var form = {
name: body.name,
surname: body.surname,
...
};
req.checkBody('name', 'Name is required').notEmpty();
req.checkBody('surname', 'Surname is required').notEmpty();
var errors = req.validationErrors();
if (errors) {
//Pass both errors and form objects as local variables
res.render('users/new', { errors: errors, form: form });
} else {
....//write to DataBase
}
new.handlebars文件
{{#if errors}}
{{#each errors}}
<div class="alert alert-danger">{{msg}}</div>
{{/each}}
{{/if}}
<form class="" method="post" action="/users/new">
<p>Name*</p>
<input type="text" value="{{form.name}}" name="name" />
<p>Surname *</p>
<input type="text" value="{{form.surname}}"name="surname" />
</form>