0

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

如何?

谢谢

4

2 回答 2

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其放入渲染视图中。

于 2013-06-22T12:53:04.770 回答
2

你的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
}    

新的.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>
于 2016-12-11T11:07:33.047 回答