Node.js 子文档的快速验证程序检查数组
这是我的模式:Node.js 子文档的快速验证程序检查数组,node.js,validation,express,mongoose,mongoose-schema,Node.js,Validation,Express,Mongoose,Mongoose Schema,这是我的模式: const InvoiceSchema = new Schema({ name: { type: String, required: true }, description: { type: String }, items: [{ name: { type: String, required: true }, rate: { type: Number, required: true }, quantity: { type: Number, require
const InvoiceSchema = new Schema({
name: { type: String, required: true },
description: { type: String },
items: [{
name: { type: String, required: true },
rate: { type: Number, required: true },
quantity: { type: Number, required:true, default: 1 },
amount: { type: Number }
}]});
我想知道如何使用Express validator来检查items元素?以前也有同样的问题,而且非常痛苦,特别是如果要验证的是一个深度数组或对象数组。我最终创建了自己的验证器()来处理这个问题。而且这个工具可以直接从mongoose模型生成验证模式 因此,上面的模式将生成验证模式:
{
"name": {
"required": {
"msg": "Value for field 'name' is required"
}
},
"description": {
"optional": true
},
"items.*.name": {
"required": {
"msg": "Value for field 'items.*.name' is required"
}
},
"items.*.rate": {
"required": {
"msg": "Value for field 'items.*.rate' is required"
},
"isDecimal": {
"msg": "Expecting 'decimal' value for field 'items.*.rate'"
}
},
"items.*.quantity": {
"required": {
"msg": "Value for field 'items.*.quantity' is required"
},
"isDecimal": {
"msg": "Expecting 'decimal' value for field 'items.*.quantity'"
}
},
"items.*.amount": {
"optional": true,
"isDecimal": {
"msg": "Expecting 'decimal' value for field 'items.*.amount'"
}
}
}
此验证模式可以提供给验证器
const halter = require('wallter').halter
const Builder = require('wallter').builder // validation schema builder
const builder = new Builder({
model: mongoose.model('YourModelName')
})
server.use(halter())
server.post('/test', function (req, res, next) {
let validationSchema = builder.build() // see above generated validation schema output
req.halt(validationSchema).then(result => {
if (result.length) {
res.send(400, result)
} else {
res.send(200)
}
return next()
})
})