使用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
相关产品推荐
相关产品推荐

