Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 子文档的快速验证程序检查数组_Node.js_Validation_Express_Mongoose_Mongoose Schema - Fatal编程技术网

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()
    })
})