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

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

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

Так что для контекста у меня есть маршрут хапи, и я использую валидацию 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", если id "someField" равен значению:"fieldIsValue", в противном случае используйте schemaB.В настоящее время он не получает это значение "someField", и поэтому просто возвращает схему B, я считаю

1 Ответ

0 голосов
/ 18 июня 2019

Итак, вот что сработало: используя "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 мы можем использовать это значение.

...