【问题标题】:Joi: How to validate all items in array have the same typeJoi:如何验证数组中的所有项目具有相同的类型
【发布时间】:2020-11-23 08:17:36
【问题描述】:

我的数组可以有多种类型:

[Joi.string(), Joi.number(), Joi.boolean(), Joi.array(), Joi.object()]

但我想同时只允许其中一个。

我尝试了以下方法:

attributes: Joi.object().pattern(/\w+/, Joi.alternatives().try([Joi.array().items(Joi.string()), Joi.array().items(Joi.number()), Joi.array().items(Joi.boolean()), Joi.array().items(Joi.array()), Joi.array().items(Joi.object())]))

我正在使用 Joi 11.4.0。 我知道这是一个旧版本,但是有什么方法可以进行这样的验证吗?其他版本可以吗?

【问题讨论】:

    标签: javascript joi


    【解决方案1】:

    这适用于版本11.4.0,但也适用于当前最新版本17.2.1

    const Joi = require('joi');
    
    const schema = Joi.object({
      attributes: Joi.alternatives().try(
        Joi.array().items(Joi.string()),
        Joi.array().items(Joi.number()),
        Joi.array().items(Joi.boolean()),
        Joi.array().items(Joi.array()),
        Joi.array().items(Joi.object())
      )
      .required(),
    })
    .required();
    
    const onlyStrings = {
      attributes: ['one', 'two', 'three']
    };
    console.log(schema.validate(onlyStrings).error);
    
    const onlyNumbers = {
      attributes: [1, 2, 3],
    };
    console.log(schema.validate(onlyNumbers).error);
    
    const onlyBooleans = {
      attributes: [false, true, false],
    };
    console.log(schema.validate(onlyBooleans).error);
    
    
    const onlyArrays = {
      attributes: [[], [], []],
    };
    console.log(schema.validate(onlyArrays).error);
    
    const onlyObjects = {
      attributes: [{}, {}, {}]
    };
    console.log(schema.validate(onlyObjects).error);
    
    // fails
    const stringAndNumbers = {
      attributes: ['one', 2, 'three']
    };
    console.log(schema.validate(stringAndNumbers).error);
    

    【讨论】:

      猜你喜欢
      • 2021-10-02
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 2023-03-26
      相关资源
      最近更新 更多