验证器因未定义参数而失败

问题描述 投票:0回答:1

我正在使用 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
参数时应用该规则。

javascript node.js validation request get
1个回答
0
投票

如果

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');
© www.soinside.com 2019 - 2024. All rights reserved.