Я хочу сделать валидацию с Джой в моем теле, но, похоже, это никогда не сработает и я все время падаю в одном и том же состоянии. Итак, если я ПОЧТА с этим
конечная точка: /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 все время.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Напрямую скопировано из документации.
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($...)