Один маршрут, две разные схемы, проверяющие полезную нагрузку в Hapi.js с Joi

У меня есть 1 маршрут, 2 разные схемы joi, и я хочу иметь возможность динамически выбирать, какую схему использовать, на основе поля в полезной нагрузке.

«Один маршрут, 2 схемы (Hapi.js с Joi)»

Итак, для контекста у меня есть маршрут hapi и я использую проверку joi "someSchema" hapiRoute.js:

...
 "validate": {
        "payload": someSchema
 }
...

В schema.js:

function ChooseSchema(schemaA, schemaB) {
  return Joi.when(Joi.ref("payload.data.attributes.someField"), {
    "is": Joi.string().valid("fieldIsValue"),
    "then": schemaA,
    "otherwise": schemaB
  });
}
module.exports = {
"someSchema": ChooseSchema(schemaA, schemaB)
}

Где schemaA и schemaB разные

Поэтому я пытаюсь использовать schemaA, если someField равно значению: fieldIsValue, в противном случае используйте schemaB. В настоящее время он не получает это значение "someField", поэтому просто возвращая schemaB, я считаю


person matt hope    schedule 13.06.2019    source источник
comment
Зачем вам две схемы?   -  person soltex    schedule 13.06.2019
comment
Из-за необходимости иметь разные проверки для 2 разных пользователей   -  person matt hope    schedule 14.06.2019
comment
ОБНОВЛЕНИЕ: я пытался выбрать схему после того, как технически проверка полезной нагрузки уже началась (по крайней мере, с точки зрения hapi.js), я верю. Что явно запрещено   -  person matt hope    schedule 18.06.2019


Ответы (1)


Вот кое-что, что сработало: использование request.query ... в hapiRoute.js:

...
"onPostAuth": {
          "method": (request, hapi) => {
              request.query.someField= request.someInfo.somefield;
...

Вы можете получить доступ к этому в schema.js следующим образом:

function ChooseSchema(schemaA, schemaB) {
  return Joi.when(Joi.ref("$query.someField"), {
    "is": Joi.string().valid("fieldIsValue"),
    "then": schemaA,
    "otherwise": schemaB
  });
}

Итак, в основном мы устанавливаем параметр строки запроса, а затем в схеме joi мы можем использовать это значение.

person matt hope    schedule 18.06.2019