首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子文档的Express-Validator校验数组

子文档的Express-Validator校验数组
EN

Stack Overflow用户
提问于 2017-04-28 04:04:54
回答 1查看 1.3K关注 0票数 3

这是我的架构:

代码语言:javascript
复制
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元素?

EN

回答 1

Stack Overflow用户

发布于 2018-01-17 13:42:30

以前也有过同样的问题,特别是如果要验证的是一个深度数组或对象数组,就会非常痛苦。我最终创建了自己的验证器(wallter)来处理这个问题。此外,该工具还可以直接从您的mongoose模型生成验证模式。

所以上面的模式将生成一个验证模式:

代码语言:javascript
复制
{
  "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'"
    }
  }
}

可以将此验证模式提供给验证器

代码语言:javascript
复制
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()
    })
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43667006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档