Joi 验证器只有键之一

2024-02-17

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

简而言之,对于钥匙a, b or c我想让任何具有以上三个以上之一的请求失败,因此:

  1. http://myapi.com/?a=value is a valid要求。

  2. http://myapi.com/?b=value&c=value2 is invalid.

Thanks!


您正在寻找对象.xor(同级) https://github.com/hapijs/joi/blob/master/API.md#objectxorpeers如果恰好是其中之一a, b, or c是必须的。

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

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

Or, object.oxor(同级) https://github.com/hapijs/joi/blob/master/API.md#objectoxorpeers如果只有其中之一a, b, or c是允许的,但不是必需的。

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

  • peers- 不得一起出现但不需要的情况下的独占键名称。
const schema = Joi.object().keys({
    a: Joi.any(),
    b: Joi.any(),
    c: Joi.any()
}).oxor('a', 'b', 'c');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Joi 验证器只有键之一 的相关文章

  • 为具有可变内容的内联块元素提供相同的高度?

    我有 4 个宽度固定但内容可变的内联块元素 并且我希望所有这些元素具有相同的高度 最大元素的高度 请参见这个jsfiddle http jsfiddle net kKZXj 我应该如何实现这个目标 如果仅使用 css 无法做到这一点 那么使
  • 在 HTML SELECT 标记中禁用键盘

    我想禁用 HTML SELECT 标记的键盘 以便用户只能使用鼠标来选择选项 我试过了event cancelBubble true on the onkeydown onkeyup and onkeypress没有运气的事件 有任何想法吗
  • 了解执行模型和事件循环

    我读过很多关于JavaScript单线程执行模型 事件循环和事件队列的文章 但有一件事尚不清楚 我创建了一个小提琴来说明我的问题 http jsfiddle net yzpmf67f http jsfiddle net yzpmf67f
  • Jquery 动画与 CSS 浮动

    我的代码有问题 宽度似乎可以工作 但浮动没有 这里是 这是一个例子 http jsfiddle net v82ck http jsfiddle net v82ck 问题 悬停时菜单上的浮动属性不会改变 我希望每个菜单元素下方的线在悬停该菜单
  • 对 JavaScript 中的 while 循环感到困惑

    我可能在这里有点厚重 但请回答我这个问题 考虑以下代码 a 1 while a lt 6 console log a a 如果我运行这个 我会在控制台中得到从 1 到 6 的值 然后是另一个 6 现在看看这个 a 1 while a lt
  • Atom“自动完成”不起作用

    因此 当您安装 Atom 时 autocomplete 会随其一起提供 并且默认情况下处于启用状态 当我编写代码时 什么也没有显示 为什么 是否需要配置任何文件才能正常工作 In autocomplete plus settings pag
  • npm install -D sass-loader node-sass Vue.js 2021

    您好 问题是为 Vue js 设置 SASS 我跑 Node js 15 7 0 Vue js vue cli 4 5 11 这是我在运行此命令时在控制台中遇到的错误 npm install D sass loader 节点 sass np
  • KineticJS - 将舞台缩放到视口

    我正在努力将默认分辨率设置为 1366x756 我会根据视口来放大和缩小它 类似于此处显示的示例 http blogs msdn com b davrous archive 2012 04 06 modernizing your html5
  • 通过单击字段启用非活动字段

    是否可以有一组非活动字段 如果单击其中一个字段 则某些字段将变为必填字段并运行某些代码段 举例来说 您显示了三个字段
  • 嵌套对象的 AJV 模式验证

    函数返回的对象看起来像这样 answer vehicle type 1 message Car model VW color red 答案 对象始终存在 其他字段基于 vehicle type E g 如果vehicle type 1 则有
  • 如何滚动到 jQuery Mobile 中的页面元素?

    我有一个很长的 jQuery 移动页面 并且想在页面加载后滚动到该页面中间的元素 到目前为止 我已经尝试了一些事情 最成功的是 jQuery document bind mobileinit function var target if t
  • 避免 AngularJS 部分视图在 IE 中缓存

    我正在开发一个 ASP NET MVC 应用程序 它也有一些 angularJS 我有一个主页 其中有不同的选项卡 当您单击它们时 它们会加载角度部分视图 主页是这样的 div class widget div div class widg
  • 使用 test() 通过正则表达式进行信用卡验证

    我正在尝试完成一些作业 看来这本书可能做错了 我有一个简单的 html 页面 允许用户在我们的例子中选择信用卡 美国运通卡 然后 用户输入一个数字并根据正则表达式评估该数字 我的问题最终是当 test 计算它返回的数字时是布尔值还是字符串
  • 获取键盘事件中的鼠标位置

    我试图在用户按住 Shift 键时出现选择轮 滚轮应以鼠标位置为中心 然而当我测试这个时 pageX and clientX两者在事件对象上都未定义 是否可以通过键盘事件获取鼠标坐标 不 只需跟踪mousemove事件并持续保存当前位置 以
  • 反转二进制网络

    如何反转二元方程 以便找到哪些输入将产生给定的输出 Example Inputs i0 through i8 Outputs o0 through o8 Operators XOR AND 二元方程 1 i0 1 i1 0 i2 1 i3
  • 托管 React 应用程序和 Express 服务器 cpanel

    我是托管新手 如果有人可以非常详细地解释 这将对我有很大帮助 我有以下问题 我有前端使用react app和后端使用expressjs and mysql 我的计算机中有一个可以运行的简单应用程序 我使用本地主机启动后端和前端 它们工作完美
  • ERR_IMPORT_ASSERTION_TYPE_MISSING 用于导入 json 文件

    这段代码运行良好 我不知道是因为我升级到 Node 17 还是什么原因 但现在我明白了 TypeError ERR IMPORT ASSERTION TYPE MISSING Module file Users xxxxx code pro
  • Safari 的 Javascript 与 document.write 的问题

    我的问题只发生在 Safari 上 IE FF Chrome 和 Opera 都可以完美运行 我正在向 DOM 添加一个对象 与 YouTube 的方式完全相同 具体取决于 ActiveX 或 NPAPI 因此在确定写入对象类型后 我通过以
  • 禁用 Materialise Carousel 上的触摸

    看起来以前没有人问过这个问题 因为我几乎在互联网上寻找一个非常简单的答案 如何禁用在物化轮播上向左 向右滑动的功能 在 Materialize js 添加 编辑 var allowCarouselDrag true value functi
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg

随机推荐

  • 实体框架 Linq 等于值或为 null

    我正在尝试使用 linq 从视图中获取项目列表 其中字段 LocationId 为值或为 null LocationId 字段是 int 我正在尝试的代码是这样的 var items context Items Where d gt d L
  • 每个工人的最大日期

    考虑两个表 工作表有如下字段W ID W Name 课程表有如下字段C ID C Name C Date 一个工人可以选修多门课程 一门课程也可以由许多工人选修 因此 两个表之间存在多对多关系 打破多对多 并创建一个名为 Takes 的新表
  • 如何调整 IntelliJ 中行尾的位置

    在 IntelliJ 中 就像在 Eclipse 中一样 代码编辑器中有一条细灰色垂直线 我假设就像在 Eclipse 中一样 该行显示了 行尾 应该在的位置 2个问题 1 在IntelliJ中哪里可以调整一行的长度 2 如果不使用与 1
  • React-Router:使用 Navlink 将道具从一个组件传递到另一个组件

    我在用
  • 如何通过svelte访问本地json文件?

    现在我使用 onMount 异步函数来访问 const dataAPI jsfwperf json let data onMount async gt const res await fetch dataAPI then res gt re
  • 在浏览器中使用模块(没有 WebPack)

    我正在摸索 ES6 的过程 遇到了模块 很好 在学习过程中 我试图看看是否可以在浏览器中使用它们withoutWebPack 我还没学过 所以 我的 JS 目录中有以下文件 文件夹结构 js lib for complied es6 via
  • 如何在单个android应用程序中正确导入多个unity模块,避免android studio中不同unity模块之间的名称冲突?

    我已经导入了两个统一模块 三角形模块和立方体模块 public class MainActivity extends AppCompatActivity Override protected void onCreate Bundle sav
  • 通过 crypto-js 的 base64 编码器

    我想将数字编码为字符 如何在输出中编码为 Base64 Code const CryptoJS require crypto js function msg return 7543275 I want to encrypt this num
  • Docker Compose 和 Kubernetes 有什么区别?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 在深入研究 Docker Google Cloud 和 Kubernetes 时 如果还
  • logd 快捷方式在 Intellij 和 Kotlin 中不起作用

    使用 logt logd loge 等快捷方式在 Intellij 中记录 Java 非常简单 但我搬到了 Kotlin 我注意到这些快捷方式不再起作用了 我不知道这是否与我的配置有关 如果不是 我该如何解决这个问题 您应该创建单独的模板以
  • 让应用程序布局与 Bootstrap 4 页面配合使用

    我使用的是 Domino 9 0 1 并成功安装了 Bootstrap Library 1 0 0 201403171254 在应用程序配置 Xsp 属性 常规下 我将主题设置为 bootstrapv3 1 1 并在应用程序配置 Xsp 属
  • 页面刷新后保留值

    我在 C 中使用按钮控件 验证按钮 我在我的项目中定义了一些全局变量 当我单击该按钮时 会发生一些表单验证 并且另一个按钮 保存按钮 可见 问题是当我单击验证按钮时 当前页面刷新并且全局变量不包含值 它显示为空 即使在页面刷新后 我如何维护
  • 序列化性能和 Google Android

    我正在寻找加快序列化性能的建议 特别是在使用 Google Android 时 对于我正在从事的一个项目 我试图将数百个对象从服务器中继到 Android 应用程序 并经历各个阶段以获得我需要的性能 首先 我尝试了一个糟糕的 XML 解析器
  • 用于注册和忘记密码的不同电子邮件验证消息

    使用 AWS 的 Cognito 可以获得很多好处 因为大多数功能 如果不是全部 已经由 AWS 实现 但我遇到了一种情况 我不确定如何使用 Cognito 来实现 考虑以下两种情况 Sign up 用户通过提供电子邮件和密码进行注册 将向
  • 哪些字符可以作为使用 Esprima 的 JavaScript 中的运算符?

    From 以前的 https stackoverflow com q 20762338 1420197问题 我学会了如何扩展 JavaScript 语言以支持更多运算符 由我创建 There Benjamin 使用 Esprima 并创建了
  • 我应该使用 std::begin 与数组吗?

    作为一个简单的例子 看一下这段代码 或者想象一下特定于数组的代码而不是模板和其他通用编码技术 int a 1 2 3 7 8 9 55 vector
  • 如何使用 $location 服务对 angularjs 控制器进行单元测试

    我正在尝试创建一个简单的单元测试来测试我的显示功能 我收到以下错误 TypeError Object has no method show 这好像是 rootScope不是控制器的范围吗 这是我的控制器 function Opponents
  • 减慢线程速度的最佳方法?使用 Sleep() 可以吗?

    我编写了一个 C 库 它执行一些非常繁重的 CPU 工作 所有数学和计算 如果留给它自己的设备 将很容易消耗 100 的所有可用 CPU 资源 它也是多线程的 以达到可用逻辑的数量 机器上的核心 因此 我在使用该库的软件应该调用的主计算循环
  • 按值返回副本而不是移动

    为什么这个程序调用复制构造函数而不是移动构造函数 class Qwe public int x 0 Qwe int x x x Qwe const Qwe q cout lt lt copy ctor n Qwe Qwe q cout lt
  • Joi 验证器只有键之一

    我正在开发一个 api 它应该允许多个参数 但对于其中三个参数 我只想允许其中一个 每个键的值更容易 但我想知道 Joi 是否也允许它 或者我应该在我的服务器中添加额外的验证逻辑 简而言之 对于钥匙a b or c我想让任何具有以上三个以上