You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Limit与Offset的Joi校验:二者需同时提供或均不提供

解决Limit和Offset参数的同步校验问题

要实现「二者要么同时提供,要么都不提供」的校验逻辑,你需要给两个参数补上双向约束,或者用明确的分支规则定义合法场景,以下是两种可行方案:

方案一:双向依赖校验(简洁版)

给limit也添加和offset对应的when规则,确保任意一个参数存在时,另一个必须存在:

limit: Joi.number().integer().when('offset', {
  is: Joi.exist(),
  then: Joi.required()
}),
offset: Joi.number().integer().when('limit', {
  is: Joi.exist(),
  then: Joi.required()
})

设置后效果:

  • 提供limit时,offset自动变为必填项;
  • 提供offset时,limit自动变为必填项;
  • 两个参数都不提供时,校验直接通过。

方案二:明确分支校验(直观版)

用Joi.alternatives拆分出两种合法的参数组合,逻辑更直白:

Joi.object({
  limit: Joi.number().integer(),
  offset: Joi.number().integer()
}).alternatives(
  // 合法场景1:两个参数都存在
  Joi.object({ 
    limit: Joi.exist(), 
    offset: Joi.exist() 
  }),
  // 合法场景2:两个参数都不存在
  Joi.object({ 
    limit: Joi.not(Joi.exist()), 
    offset: Joi.not(Joi.exist()) 
  })
)

这种方式把允许的情况明确列出来,可读性更强,适合需要清晰展示校验逻辑的场景。

内容的提问来源于stack exchange,提问作者Rishit Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:00:11