JOI - Проверка сложного объекта

Я пытался, пытался, но не могу понять :(

Это объект, который мне нужно проверить:

let body = {
    greeting:
        {
            stringValue: 'Hello !',
            stringListValues: [],
            binaryListValues: [],
            dataType: 'String'
        },
    newsletterId:
        {
            stringValue: '123456789',
            stringListValues: [],
            binaryListValues: [],
            dataType: 'String'
        }
};

Мне нужно проверить, что существует приветствие, что у него есть ключ строковое значение, и он не пуст. Остальные ценности меня не интересуют.

Кроме того, для второго объекта идентификатор информационного бюллетеня, который также имеет ключ строковое значение и не является пустым. Остальные ценности меня не интересуют.

Я придумал проверку только корневого объекта с помощью этой схемы:

const schema = {
    greeting: Joi.required(),
    newsletterId: Joi.required()
};

Я прочитал много примеров, но не смог найти ни одного с такой структурой.

🤔 А знаете ли вы, что...
JavaScript обеспечивает обработку ошибок с использованием конструкции try...catch.


3
3 855
1

Ответ:

Решено

давайте определим схему:

const schema = Joi.object().keys({
    greeting: Joi.object({
       stringValue: Joi.string().required().empty(['', null]),
       stringListValues: Joi.array().items(Joi.string()),
       binaryListValues: Joi.array().items(Joi.binary())
    }).required(),
    newsletterId: // same as above
});

и протестировать так:

Joi.validate(myObjectToTest, schema, function(error, cleanObject){
    console.info(error, cleanObject);
})

Полный справочник можно найти здесь https://github.com/hapijs/joi/blob/master/API.md