【问题标题】:Joi validate Sum across an ArrayJoi 验证数组中的总和
【发布时间】:2021-07-16 12:21:07
【问题描述】:

我想验证给定的 JSON,约束为 expenditure 不得超过 credit

{
  "expenditure": {
    "house": 2,
    "electricity": 1,
    "phone": 12
  },
  "credit": 6
}
const Joi = require("joi");

const schema = Joi.object({

    expenditure: Joi.object({
        house: Joi.number().integer().min(0).max(5).optional(),
        electricity: Joi.number().integer().min(0).max(5).optional(),
        phone: Joi.number().integer().min(0).max(5).optional()
    }),

    credit: Joi.number().integer().min(0).max(15).greater(
        Joi.ref('expenditure', {"adjust": expenditure => {
            return expenditure.house + expenditure.electricity + expenditure.phone;
        }})
    )
});

以上代码适用于在对象范围内进行约束,但我需要对此类内容进行验证

[
    {
        "phone_allowance": 12
    },
    {
        "phone_allowance": 10
    },
]

为了确保数组中所有phone_allowance 的总和永远不会超过某个给定值,比如50

【问题讨论】:

    标签: javascript validation joi


    【解决方案1】:

    你可以使用custom()

    https://github.com/sideway/joi/blob/master/API.md#anycustommethod-description

    Working Demo

    var schema = Joi.array().items(
      Joi.object({
        phone_allowance: Joi.number()
      })
    ).custom((value, helpers) => {
      var total = value.reduce((a, b) => a + b.phone_allowance, 0)
    
      if (total > 5) {
        return helpers.error('any.invalid');
      }
    
      return value;
    });
    

    【讨论】:

      猜你喜欢
      • 2021-02-05
      • 2017-07-28
      • 2021-12-23
      • 2020-06-04
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多