这是我的架构:
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元素?
发布于 2018-01-17 13:42:30
以前也有过同样的问题,特别是如果要验证的是一个深度数组或对象数组,就会非常痛苦。我最终创建了自己的验证器(wallter)来处理这个问题。此外,该工具还可以直接从您的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()
})
})https://stackoverflow.com/questions/43667006
复制相似问题