【问题标题】:How to allow exceptional value in Joi?如何让 Joi 具有非凡的价值?
【发布时间】:2020-03-13 23:24:23
【问题描述】:

我正在尝试验证 json 对象中的一个键,该键的值应大于另一个键的值。作为例外,我想允许 -1 也是有效值。

// valid because max is greater than min
var object1 = {
    min: 5,
    max: 7
}

// invalid because max is not greater than min
var object2 = {
    min: 5,
    max: 5
}

// invalid because max is not greater than min
var object3 = {
    min: 5,
    max: 3
}

// valid as exception we want to allow -1
var object4 = {
    min: 5,
    max: -1
}

var schema = Joi.object({
    min: Joi.number().integer(),
    max: Joi.number().integer().greater(Joi.ref('min'))                   
})

此架构可以很好地处理除例外情况之外的所有情况。我怎样才能增强我的schema 以涵盖特殊情况。

【问题讨论】:

  • max 可以是-1,min 可以是-1?

标签: javascript json validation object joi


【解决方案1】:

只需将 allow(-1) 添加到您的最大架构以允许 -1 值。

var schema = Joi.object({
    min: Joi.number().integer(),
    max: Joi.number().integer().allow(-1).greater(Joi.ref('min'))
});

Ref Docs

测试:

const Joi = require('@hapi/joi');
const assert = require('assert');

var schema = Joi.object({
    min: Joi.number().integer(),
    max: Joi.number().integer().allow(-1).greater(Joi.ref('min'))
});

// valid because max is greater than min
var object1 = {
    min: 5,
    max: 7
};

assert.deepStrictEqual(schema.validate(object1).error, undefined);

// invalid because max is not greater than min
var object2 = {
    min: 5,
    max: 5
};

assert.notStrictEqual(schema.validate(object2).error, undefined);

// invalid because max is not greater than min
var object3 = {
    min: 5,
    max: 3
};

assert.notStrictEqual(schema.validate(object3).error, undefined);

// valid as exception we want to allow -1
var object4 = {
    min: 5,
    max: -1
};

assert.deepStrictEqual(schema.validate(object4).error, undefined);

【讨论】:

  • 这个问题无法解决 - 您无法确保按键顺序和对象操作最终会按顺序使用按键。您极不可能看到这样的对象设计。如果订单是相关的,那么也许您需要将容器更改为一个数组,这样它最终会像:[{name: 'a'}, {name: 'c'}, {name: 'b'}] - 这种结构对您有用吗?
猜你喜欢
  • 2012-05-28
  • 2019-12-31
  • 2011-01-18
  • 2018-12-09
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
相关资源
最近更新 更多