如何使用 express-validator 对嵌套对象进行验证

Posted

技术标签:

【中文标题】如何使用 express-validator 对嵌套对象进行验证【英文标题】:How to implement validation using express-validator for the nested object 【发布时间】:2020-06-29 06:02:42 【问题描述】:

我创建了一个模型如下:

在模型中“name”、“commodityID”、“totalAmount”是必需的,但注意商品ID和totalAmount是内部对象“productDetails”的一部分,现在我使用express-validator进行服务器端验证像这样

此验证适用于有意义的“名称”字段,但不适用于作为内部对象字段的“totalAmount”和“commodityID”, 这是我扔邮递员的照片

你们可以告诉我解决这个问题的正确方法

【问题讨论】:

【参考方案1】:

对于数组

productDetails: [
  
    commodityID: 
      type: mongoose.Schema.Types.ObjectId,
      required: true,
      ref: "commodity",
    ,
    perOnePrice:  type: String, required: true ,
    totalAmount:  type: Number, required: true ,
    
  ,
],

使用

[
 body('productDetails.*.commodityID').not().isEmpty()
 body('productDetails.*.perOnePrice').not().isEmpty()
 body('productDetails.*.totalAmount').not().isEmpty()
]

对于嵌套对象,假设:

productDetails: 
    commodityID: 
      type: mongoose.Schema.Types.ObjectId,
      required: true,
      ref: "commodity",
    ,
    perOnePrice:  type: String, required: true ,
    totalAmount:  type: Number, required: true ,      
  ,

使用

[
 body('productDetails.commodityID').not().isEmpty()
 body('productDetails.perOnePrice').not().isEmpty()
 body('productDetails.totalAmount').not().isEmpty()
]

【讨论】:

【参考方案2】:

对嵌套对象使用通配符 * Read Here

   [
        check('name', " ").not().isEmpty()
        check('productDetails.commdityID', " ").not().isEmpty()
        check('productDetails.totalAmount', " ").not().isEmpty()
    ]

【讨论】:

以上是关于如何使用 express-validator 对嵌套对象进行验证的主要内容,如果未能解决你的问题,请参考以下文章

javascript 如何使用express-validator验证表达式是否为空?

使用 express-validator 作为 websockets 的中间件

在 joi 和 express-validation 中允许字符串为空或空

Express-Validator 中的验证

使用 Express-Validator 验证 POST 参数

javascript 使用express-validator的公共验证节点。