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

使用Validator校验GET请求时,非必填mode参数校验异常如何解决?

如何让Validator仅当请求包含指定参数时触发校验规则

我使用Validator对HTTP请求进行规则校验,为GET请求getGameModes添加了校验规则,用于检查输入参数中的mode值,mode并非必填参数。规则代码如下:

getGameModes: {
    mode: `in:${GAME_MODES.COMPETITIVE},${GAME_MODES.FRIENDLY},${GAME_MODES.TUTORIAL}`
}

以下请求均能正常校验:

  • 满足规则的请求校验通过,如 http://localhost:3000/getGameModes?mode=COMPETITIVE
  • 不满足规则的请求抛出错误,如 http://localhost:3000/getGameModes?mode=NOT_EXISTS_MODE
  • 不带任何参数的请求校验通过,如 http://localhost:3000/getGameModes

但当请求中不含mode参数但包含其他参数(如someOther)时,例如 http://localhost:3000/getGameModes?someOther=test,Validator会抛出错误:

"message": "The selected mode is invalid."

需求是:仅当请求中包含mode参数时才应用该校验规则。


解决方案

给mode的校验规则添加sometimes前缀,即可实现仅当字段存在时才触发后续校验的逻辑:

修改后的规则代码:

getGameModes: {
    mode: `sometimes|in:${GAME_MODES.COMPETITIVE},${GAME_MODES.FRIENDLY},${GAME_MODES.TUTORIAL}`
}

规则说明

  • sometimes是Validator的内置规则,作用是:只有当当前字段(这里是mode)存在于请求参数中时,才会执行后面的in校验规则。
  • 这样修改后,无论请求是否携带其他参数,只要没有mode参数,就不会触发mode的取值校验;只有当请求包含mode时,才会检查它的取值是否在指定的合法范围内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:58:12