【发布时间】:2011-11-27 20:54:19
【问题描述】:
您如何使用 Express 和 Mongoose 处理表单验证?您使用的是自定义方法、某些插件还是默认的错误数组?
虽然我可能会看到使用默认错误数组进行一些非常简单的验证,但这种方法似乎在嵌套模型的场景中崩溃了。
【问题讨论】:
标签: node.js validation express mongoose
您如何使用 Express 和 Mongoose 处理表单验证?您使用的是自定义方法、某些插件还是默认的错误数组?
虽然我可能会看到使用默认错误数组进行一些非常简单的验证,但这种方法似乎在嵌套模型的场景中崩溃了。
【问题讨论】:
标签: node.js validation express mongoose
我个人使用node-validator 来检查用户的所有输入字段是否正确,然后再将其呈现给Mongoose。
Node-validator 也很适合创建所有错误的列表,然后可以呈现给用户。
【讨论】:
Mongoose 有验证中间件。您可以单独为模式项定义验证函数。也可以验证嵌套项目。此外,您可以定义异步验证。欲了解更多信息,请查看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');
}
...
});
【讨论】:
我个人使用express-form 中间件进行验证;它还具有过滤功能。它基于节点验证器,但对 express 有额外的好处。它向请求对象添加一个属性,指示它是否有效并返回一个错误数组。
如果您使用的是 express,我会使用它。
【讨论】: