Инструкция по дрочке, когда состояние

Я хочу сделать валидацию с Джой в моем теле, но, похоже, это никогда не сработает и я все время падаю в одном и том же состоянии. Итак, если я ПОЧТА с этим

конечная точка: /elasticSearch?eType=scroll&scroll=1h

Тело:{}

это должно было вызвать ошибку, потому что eType - это прокрутить, и в этом случае требуется scroll_id, а не нуль, не пустой.

даже когда я ПОЧТА с этим

конечная точка: /elasticSearch?eType=search&scroll=1h

Тело:{}

это должно было вызвать ошибку, потому что eType — это поиск, и в этом случае требуется запрос.

так что с этими кодами,

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

так что кто-нибудь может помочь мне понять, почему эти проверки неверны?

Спасибо

Обновлять

По умолчанию, если я сделаю это так:

body: 
  { 
    query: 
     Joi.alternatives()
     .when(Joi.ref('$query.eType'), 
      { 
       is: Joi.string().equal('search'), 
       then: Joi.required() 
      }
     ), 
   scroll_id: 
    Joi.alternatives() 
     .when(Joi.ref('$query.eType'), 
     { 
      is: Joi.string().equal('scroll'), 
      then: Joi.required() 
     }
    ) 
   }

Это требовало запроса и scroll_id все время.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
2 684
1

Ответы 1

Напрямую скопировано из документации.

When using a Joi validation object, the values of the other inputs (i.e. headers, query, params, payload, and auth) are made available under the validation context (accessible in rules as Joi.ref('$query.key')).

Итак, используйте Joi.ref('$query.eType') в своих ссылках электронный тип, потому что вы пытаетесь проверить полезную нагрузку в соответствии с параметрами запроса, на этапе проверки они находятся в разных областях.

Joi.alternatives()
   .when(Joi.ref('$query.eType'), {
     is: Joi.string().equal('search'),
     then: Joi.required()
   })

Как узнать, правильно ли мы получаем значение с помощью Joi.ref($...)

samuel cote 04.02.2019 17:01

Другие вопросы по теме