Joi 验证器只有一个键

DSC*_*SCH 6 javascript node.js joi

我正在开发一个应该允许多个参数的 api,但对于其中三个我只想允许其中一个。每个键的值更容易,但我想知道 Joi 是否也允许它,或者我应该在我的服务器中添加额外的验证逻辑。

简而言之,对于 keys ab或者c我想失败具有三个以上之一的任何请求,因此:

  1. http://myapi.com/?a=value一个有效的请求。

  2. http://myapi.com/?b=value&c=value2无效的

谢谢!

Rap*_*nah 9

您正在寻找object.xor(对等),如果正好一个ab或者c是必需的。

定义一组键之间的排他关系,其中一个是必需的,但不是同时需要:

  • peers- 不能一起出现但需要其中之一的专有键名。peers可以是单个字符串值、字符串值数组或作为参数提供的每个对等点。
const schema = Joi.object().keys({
    a: Joi.any(),
    b: Joi.any(),
    c: Joi.any()
}).xor('a', 'b', 'c');
Run Code Online (Sandbox Code Playgroud)

或者,object.oxor(同行)如果只有一个ab或者c是允许的,但都不需要。

定义一组键之间的排他关系,其中只允许一个但不需要一个,其中:

  • peers - 不能一起出现但不需要的专有键名。
const schema = Joi.object().keys({
    a: Joi.any(),
    b: Joi.any(),
    c: Joi.any()
}).oxor('a', 'b', 'c');
Run Code Online (Sandbox Code Playgroud)