如何在Node.js + Express + Mongoose + Jade中处理表单验证,尤其是嵌套模型

时间:2011-09-29 16:41:06

标签: node.js validation express mongoose

您如何使用Express和Mongoose处理表单验证?您使用的是自定义方法,某些插件还是默认错误数组?

虽然我可能会看到使用默认错误数组进行一些非常简单的验证,但这种方法似乎在嵌套模型的情况下会爆炸。

3 个答案:

答案 0 :(得分:18)

我个人使用node-validator检查用户的所有输入字段是否正确,然后再将其呈现给Mongoose。

Node-validator也非常适合创建可以呈现给用户的所有错误的列表。

答案 1 :(得分:14)

Mongoose有验证中间件。您可以单独为模式项定义验证函数。嵌套项也可以验证。此外,您可以定义asyn验证。有关详细信息,请查看mongoose page

var mongoose = require('mongoose'),
    schema = mongoose.Schema,
    accountSchema = new schema({
      accountID: { type: Number, validate: [
        function(v){
          return (v !== null);
        }, 'accountID must be entered!'
      ]}
    }),
    personSchema = new schema({
      name: { type: String, validate: [
        function(v){
          return v.length < 20;
        }, 'name must be max 20 characters!']
      },
      age: Number,
      account: [accountSchema]
    }),
    connection = mongoose.createConnection('mongodb://127.0.0.1/test');
    personModel = connection.model('person', personSchema),
    accountModel = connection.model('account', accountSchema);

...
var person = new personModel({
  name: req.body.person.name, 
  age: req.body.person.age,
  account: new accountModel({ accountID: req.body.person.account })
});
person.save(function(err){
  if(err) {
    console.log(err);
    req.flash('error', err);
    res.render('view');
  }
...
});

答案 2 :(得分:5)

我个人使用express-form中间件进行验证;它还具有过滤功能。它基于节点验证器,但还有额外的快递奖励。它向请求对象添加一个属性,指示它是否有效并返回错误数组。

如果您使用快递,我会使用此功能。