如何在Node.js + Express + Mongoose + Jade中处理表单validation,特别是嵌套模型

你如何处理Express和Mongoose的表单validation? 你使用自定义的方法,一些插件,或默认错误数组?

虽然我可能会看到使用默认的错误数组进行一些非常简单的validation,但是这种方法似乎在嵌套模型的场景中爆炸了。

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

节点validation器也可以创build所有错误列表,然后显示给用户。

mongoose有validation中间件。 您可以单独为模式项定义validation函数。 嵌套的项目也可以被validation。 此外,你可以定义asynchronousvalidation。 欲了解更多信息,请查阅mongoose页面 。

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'); } ... }); 

我个人使用表单中间件做validation; 它也具有过滤function。 它基于节点validation程序,但有额外的奖励奖金。 它将一个属性添加到请求对象,指示它是否有效并返回错误数组。

如果你使用快递,我会使用这个。