Zod Schema Validation 中至少一个/最少一个字段

2023-11-27

我已经使用 JOI 实现了此代码,其中用户必须发送 userId 和正文中的至少一个键。如何使用 ZOD 实现相同的功能?

  params: Joi.object().keys({
    userId: Joi.required().custom(objectId),
  }),
  body: Joi.object()
    .keys({
      name: Joi.string(),
      email: Joi.string().email(),
      password: Joi.string().custom(password),
    })
    .min(1),
};

我认为没有直接的模拟zod但你可以使用来实现这个约束refine or superRefine

使用优化您的架构可能如下所示:

const schema = z.object({
  params: z.object({
    userId: z.string()
  }),
  body: z
    .object({
      name: z.string(),
      email: z.string().email(),
      password: z.string()
    })
    .partial()
    .refine(
      ({ name, email, password }) =>
        name !== undefined || email !== undefined || password !== undefined,
      { message: "One of the fields must be defined" }
    )
});

如果精炼失败那么你会得到一个ZodError并指定消息。

可以在任意部分对象上重用的更通用的优化函数如下所示:

const atLeastOneDefined = (obj: Record<string | number | symbol, unknown>) =>
  Object.values(obj).some(v => v !== undefined);

我注意到对象 ID 和密码有自定义解析。我认为这些都可以完成refine但我不熟悉 Joi 自定义验证器的工作原理,所以我不想用细化来编写它们并让它成为不正确的代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zod Schema Validation 中至少一个/最少一个字段 的相关文章

  • readFile() 和 readFileSync() 之间的区别

    以下代码将index html 的内容 仅包含文本hello world 输出到浏览器 然而 当我更换readFile with readFileSync 请求超时 我缺少什么 是否需要不同类型的缓冲区 我使用的是node 0 61 和ex
  • 使用 Morphia 配置 Spring Boot?

    我不想利用 Spring DATA MongoDB 支持 我想利用名为 Morphia 的 MongoDB ORM https github com mongodb morphia https github com mongodb morp
  • 在 Phaser3 中从 Multiatlas 加载文件时出错

    尝试使用 Phaser 和 TexturePacker 中的多图集功能 出现此错误 VM32201 1 GET http localhost 8080 bg sd json 404 Not Found Texture js 250 Text
  • 检查字段是否存在于数组的子文档中

    我有一个与此类似的架构 id Number line items id String quantity Number review request sent Boolean total price String name String or
  • 规则和夏令时

    我在用着rrule https github com jakubroztocil rrule在我的数据库中创建和存储事件 一切正常 直到我发现我的重复事件与 3 月 31 日之后有一个小时的差异 在法国 这一天我们进行夏令时更改 实际上 我
  • 使用 typescript 时 html-webpack-plugin 出现太多错误

    我正在使用 Webpack 和 typescript 启动一个项目 但是当我尝试运行开发服务器时 我在 html webpack plugin 上遇到很多错误 这是我的输出 gt email protected cdn cgi l emai
  • ElectronJS 捕获屏幕质量低

    我正在使用 ElectronJS 测试屏幕捕获 我可以捕获屏幕 但捕获的视频质量低于原始视频 操作系统 Linux Mint 20 电子版本 11 1 0 这是我的代码 我选择我的屏幕 然后使用以下命令在电子应用程序中显示捕获的屏幕vide
  • 在 iframe/对象标签内运行时更新初始路由器 url

    我目前正在容器 主 Vue 应用程序的对象标签 iframe 也可以工作 内渲染 Vue 应用程序 首先 我设置一个文件服务器 为该容器或请求的子应用程序提供服务 以在 div 内呈现 为了简单起见 我将仅显示 Node Express 服
  • 如何取消/关闭 Angular 中的行为主体

    我有一个订阅了行为主题的组件ngOnInit生命周期 该组件 html 使用ngIf在渲染表格之前查看数据是否存在 当我离开该页面时 我想确保下次返回时 该表不可见 直到再次获取该数据 到目前为止 我能够做到这一点的唯一方法是调用该主题的
  • 如何从表格的下拉菜单中删除先前选择的选项?

    我正在 Angular 7 上制作一个项目 它有一个表格 其中有一列有下拉菜单 下拉列表包含各种语言 当在特定行中选择一种语言时 它不应出现在后续行的下拉列表中 我怎么做 我尝试使用 splice 从数组中删除所选语言 但是 当它删除对象时
  • 如何在 Meteor 中读取依赖于另一个集合的集合

    我正在尝试从集合中加载最新的帖子 同时加载同一篇帖子的所有评论 该集合具有引用 而不是将整个文档存储在彼此内部 Post title body etc Comment postId body etc 我使用iron router作为路由包
  • 如何使用restify上传文件

    我正在尝试使用 Restify 模块将图像文件上传到 Rest 服务器 更具体地说是 Confluence 但出现断言错误 我不确定我是否使用正确的方法将文件上传到 REST 服务器 有人能指出我正确的方向吗 这是我的尝试 var rest
  • 运行 npm install 时出错 Error: 404 Not Found: 7zip-bin@~4.1.0

    当我运行 npm install 时 我看到此错误 3 verbose stack Error 404 Not Found 7zip bin 4 1 0 2293 verbose stack at fetch then res C cygw
  • 如何让material-ui文本字段中的标签位于右侧?

    我在用着material ui and typescript对于我的 React 项目 rtl 布局 我不知道如何将文本字段的标签放在右侧 找到了更好的方法without外部库 export const theme createTheme
  • 在 ExpressJS 中为特定路由链接多个中间件

    我只想验证一些东西 但无法在 Express 文档或在线中找到与此相关的任何内容 尽管我知道这是一个功能 我可以测试一下 但我真的没有一个好的模板 并且希望听到社区的意见 如果我像这样在express中定义一条路线 app get func
  • npm 脚本:node-sass 不监视部分 sass 文件

    我有这个项目结构 src assets css sass main scss variables scss 我正在尝试编写一个 npm 脚本 该脚本将监视我的所有 scss 文件 包括部分文件 中的更改 然后仅编译我的 main scss
  • 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
  • JavaScript 中的 Promise.all:如何获取所有 Promise 的解析值?

    我编写了以下node js文件 var csv require csv parser var fs require fs var Promise require bluebird var filename devices csv var d
  • 重命名($project)数组中的字段 - MongoDB [重复]

    这个问题在这里已经有答案了 我有一个类似以下的文件 id 59ba903dacea50d0d7d47168 sections id 59d9dd7947ce651544c5d4c1 sectionName Section 1 id 59d9
  • Ionic 2 获取离子输入值

    我正在使用 ionic 2 创建登录名 请不要只回答 您只需要添加 ngModules 属性 如果您认为这就是解决方案 请解释原因 解释一下 就像对孩子做的那样 我的代码在login ts import Component from ang

随机推荐

  • 使用带有导航抽屉的 ViewPager 的操作栏选项卡

    要求 使用带有导航抽屉的 ViewPager 的操作栏选项卡 我可以创建一个导航抽屉示例 单独使用 ViewPager 的操作栏选项卡 但是当我尝试同时使用两者时 我遇到了问题 我可以使用片段创建导航抽屉 并使用片段创建操作栏选项卡 但这两
  • 在 python3 中合并异步迭代

    有没有一个好的方法 或者一个支持良好的库 用于在 python3 中合并异步迭代器 期望的行为与在reactivex中合并可观察量的行为基本相同 也就是说 在正常情况下 如果我合并两个异步迭代器 我希望生成的异步迭代器按时间顺序产生结果 迭
  • WPF 中的 Thread.CurrentPrincipal.Identity.Name 为空

    EDIT 简单的问题是 我怎样才能得到Thread CurrentPrincipal Identity Name让当前用户登录WPF END EDIT 我正在尝试调用一个现有方法 不在任何类型的服务中 只是 POCO 中的一个方法 来检索当
  • Java 开源调查/问卷引擎 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 是否有一个允许问题分支的 Java 开源调查引擎 即问题 1 有 A B 或 C 选项 每个选项都会带您进入一组不同的后续问题 我找到了几个 JSurveyLib 和 Socrate
  • 基于嵌入文档计数的 MongoDB 查询

    假设我有 Order id items 如何过滤商品编号大于5的订单 您无法按嵌入集合的大小进行查询 您需要创建具有集合大小的字段以满足此类需求 mongo db 文档 size 运算符匹配任何数组 具有指定数量的元素 以下示例将匹配 对象
  • 当 ContentControl.Content 更改时开始动画

    我试图在 Button 或 ContentControl 等内容控件更改其内容时触发动画 我最初的想法是这样做
  • 如何在 Spyder 中显示图表

    自 2015 年 11 月起 plotly 开源并可用于 python https plot ly javascript open source announcement 当尝试离线绘制一些图时 这些可以在 iPython Notebook
  • 在代码隐藏中使用资源图像

    我需要动态更改应用于我的按钮之一的背景图像 但不知道如何操作 图像将添加到项目中 并将其 构建操作 设置为 资源 我已经尝试过以下操作 buttonUnits Background new ImageBrush new BitmapImag
  • 我们可以将 Firebase 实时数据库与核心 PHP 一起使用吗?

    我有一个 Android 应用程序 后端代码位于使用 MySql 的核心 PHP 中 有没有办法像我们在 MySql 上执行的方式直接从 API 执行 CRUD 操作 如果它是一个网络应用程序 可以使用 javascript 来完成 但是我
  • 使用 TextInputLayout 时更改 EditText 提示颜色

    我正在使用新的TextInputLayout来自设计库 我能够让它显示并更改浮动标签的颜色 不幸的是实际EditText提示现在始终为白色 我尝试过以编程方式更改 XML 样式中的hintColor 还尝试使用android support
  • 超出纳秒时间戳范围

    我在 Googlespeedsheet 中有一个变量 date hiring 格式如下 16 01 2016 我在Python中导入它 该变量有一个对象类型 我尝试转换为日期时间 from datetime import datetime
  • html或css中指定图像大小的区别

    这个链接非常接近我的问题 但似乎更适用于语法而不是实际渲染的输出 我看到图像的高度和宽度可以在实际的html中定义img标签 事实上我读它的方式should在那里定义 然而 我想知道当实际涉及到图像的显示方式时 什么才是重要的 如果我插入以
  • 分配新块时如何控制“std::deque”的块大小?

    当我们向a中插入一个新元素时std deque 如果现有的块都已满 它可能会分配一个新的块来包含该元素 然而 实现如何控制块大小呢 用户是否可以控制块大小 或者它仅取决于实现的选择 例如4K 还是 8K 这是实现的选定值 无法对其进行控制
  • 在系统分区写入文件

    我正在尝试将我的应用程序生成的文件写入系统分区 由于我无法在应用程序中创建 FileOutputStream 因此我在应用程序的数据目录中创建文件 更正权限 然后将其移动到系统分区 目前 下面的代码错过了 system 的可写重新安装 出于
  • 在命令行中将环境变量传递给java类

    我需要从本地文件中读取一些属性etc myconfig config 文件夹 我需要在命令行中给出这个文件路径 我已经给出了如下所述 但出现错误 显示如下 Error Could not find or load main class te
  • IntentService 不会启动使用 AlarmManager

    我知道对此有很多疑问 但我真的不知道我的错误在哪里 我的服务注册在AndroidManifest xml文件中
  • 无法加载文件或程序集“Oracle.DataAccess”或其依赖项之一。尝试加载格式不正确的程序

    我已在 IIS 7 0 Windows Server 2008 R2 64 位上安装了 Web 应用程序 我指的是 oracle DataAccess dll 当我尝试访问该应用程序时 我收到以下消息 无法加载文件或程序集 Oracle D
  • QT 5.0 QDebug编译错误

    我在使用 QDebug 编译代码时遇到问题 但我确实需要它 include
  • PHP 获取静态方法

    我想通过 var 调用类方法 如下所示 var read params array some parameter if MyClass has the static method var echo MyClass var params el
  • Zod Schema Validation 中至少一个/最少一个字段

    我已经使用 JOI 实现了此代码 其中用户必须发送 userId 和正文中的至少一个键 如何使用 ZOD 实现相同的功能 params Joi object keys userId Joi required custom objectId