express-validator保留输入值

时间:2013-06-21 04:44:52

标签: node.js validation express

我是新的没有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="?")

如何?

由于

2 个答案:

答案 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.firstperson.lastperson.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>