我正在使用 Validator 使用定义的规则来验证 http 请求。我为 GET 请求添加了一项规则,用于检查输入参数中
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=COMPETITIVE&someOther=test
http://localhost:3000/getGameModes?mode=NOT_EXISTS_MODE
http://localhost:3000/getGameModes
但是验证器失败并抛出以下请求的错误,其中请求中不存在模式参数,但请求中还有其他参数(
someOther
)
http://localhost:3000/getGameModes?someOther=test
错误
"message": "The selected mode is invalid."
谁能告诉我如何解决这个问题?我只想当请求参数包含请求中的
mode
参数时应用该规则。
如果
sometimes
规则不适合您,您可以尝试添加自定义验证。在文档中,他们有使用自定义规则的示例。
所以你可以尝试这样的事情。
const getGameModes = {
mode: 'gamemode'
};
function validateGameMode(name, value, params) {
const validGameModes = [GAME_MODES.COMPETITIVE, GAME_MODES.FRIENDLY, GAME_MODES.TUTORIAL];
return (value !== '') ? validGameModes.includes(value) : true;
}
const v = Validator.make(data, getGameModes);
v.extend('gamemode', validateGameMode, ':attr is not a valid game mode');