Дзёи несколько, когда состояние

Я хочу провести валидацию с Джои в моем теле, но, похоже, это никогда не сработает и все время падаю в одном и том же состоянии. Итак, если я POST с этим

endPoint: / elasticSearch? eType = scroll & scroll = 1h

Тело:{}

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

даже когда я POST с этим

endPoint: / 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.


person samuel cote    schedule 31.01.2019    source источник


Ответы (1)


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

При использовании объекта проверки Joi значения других входных данных (например, заголовки, запрос, параметры, полезная нагрузка и аутентификация) становятся доступными в контексте проверки (доступном в правилах как Joi.ref ('$ query.key ')).

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

Joi.alternatives()
   .when(Joi.ref('$query.eType'), {
     is: Joi.string().equal('search'),
     then: Joi.required()
   })
person metoikos    schedule 01.02.2019
comment
Как узнать, правильно ли мы получили значение с помощью Joi.ref ($ ...) - person samuel cote; 04.02.2019