Джой несколько, когда условие - PullRequest
0 голосов
/ 31 января 2019

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

endPoint: /asticSearch? EType = scroll & scroll = 1h

Body: {}

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

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

endPoint: /asticSearch? eType = search & scroll = 1h

Body: {}

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

поэтому с этими кодами

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

1 Ответ

0 голосов
/ 01 февраля 2019

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

При использовании объекта проверки 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()
   })
...