Я пытаюсь выполнить проверку с помощью Joi, но я пришел к сценарию, которого не могу реализовать. У меня есть объект. В некоторых случаях объект будет иметь идентификатор (изменить), а в других - нет (создать).
Я хочу подтвердить, что в случае, если id отсутствует, должно быть несколько других полей.
Пока что мое единственное решение, которое работает, - это когда id равен нулю и вообще не отсутствует. Есть ли способ сопоставить несуществующий ключ или я должен изменить его на null (немного хакерский).
joi.object().keys({
id: joi
.number()
.min(0)
.allow(null),
someOtherField1: joi.when("id", { is: null, then: joi.required() })
});
Заранее спасибо!



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


Если вы готовы принять null как id и хотите выполнить для него условные обозначения, я бы предложил по умолчанию для поля id установить значение null. Таким образом, вы можете исключить его из полезной нагрузки и по-прежнему запрашивать его с помощью Joi.when().
Например:
Joi.object().keys({
id: Joi.number().min(0).allow(null).default(null),
someOtherField1: Joi.string().when('id', { is: null, then: Joi.required() })
});
Передача как пустого объекта, {}, так и объекта с nullid, { "id": null }, приведет к:
ValidationError: child "someOtherField1" fails because ["someOtherField1" is required]
@srgbnd вызов .when() может быть связан, например, .when({ ... }).when({ ... })...
Undefined - это пустое значение для Joi. Используйте «не» вместо «есть»
Пример: { not: Joi.exist(), then: Joi.required() }
@Ankh, что, если я хочу проверить, существует ли несколько свойств? Можем ли мы написать что-то вроде следующего?
Joi.string().when('id'||'guid', { is: null, then: ...