您如何使用Express和Mongoose处理表单验证?您使用的是自定义方法,某些插件还是默认错误数组?
虽然我可能会看到使用默认错误数组进行一些非常简单的验证,但这种方法似乎在嵌套模型的情况下会爆炸。
答案 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中间件进行验证;它还具有过滤功能。它基于节点验证器,但还有额外的快递奖励。它向请求对象添加一个属性,指示它是否有效并返回错误数组。
如果您使用快递,我会使用此功能。