Hapi-Joi проверяет полезную нагрузку, которая может быть массивом объектов или просто объектом Javascript?

У меня есть почтовый вызов, который может принимать полезную нагрузку как один объект JS, а также массив объектов, чтобы сохранить его в БД. Как написать схему для проверки такой полезной нагрузки?

JS-объект

{
  label: 'label',
  key: 'key',
  help_text: 'text'
}

Or

[
{
  label: 'label1',
  key: 'key1',
  help_text:'text1'
 },
 {
  label: 'label2',
  key: 'key2',
  help_text:'text2'
 }
 ]

person kailash yogeshwar    schedule 09.01.2017    source источник
comment
Сначала разберите его из JSON. JSON.parse(jsObj); Затем проверьте, является ли это массивом или объектом. Будьте осторожны, массив также является объектом. Для массива вы можете использовать прототип: Array.isArray(arr); Для объекта вы можете использовать это: value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object';   -  person DomeTune    schedule 09.01.2017
comment
Спасибо @DominikNoll, у меня уже есть эта логика в моем обработчике, я выделяю всю часть проверки в отдельные файлы, а затем проверяю при определении маршрутов внутри объекта конфигурации.   -  person kailash yogeshwar    schedule 09.01.2017
comment
М-м, тогда я не понимаю вашего вопроса... Вы хотите знать, как вы называете маршруты? Или вы хотите знать, как обрабатывать JS-объект в функции? @кайлаш йогешвар   -  person DomeTune    schedule 09.01.2017


Ответы (1)


Это можно сделать с помощью Joi.alternatives(). Вот рабочий пример:

const joi = require('joi');

var objectSchema = joi.object().keys({
    label: joi.string().required(),
    key: joi.string().required(),
    help_text: joi.string().required()
}).unknown(false);

var arraySchema = joi.array().items(objectSchema);

var altSchema = joi.alternatives().try(objectSchema, arraySchema);

var objTest = {label: 'cuthbert', key: 'something', help_text: 'helping!'};

var arrTest = [
    objTest
];

var failingArrTest = [
    {
        unknownProperty: 'Jake'
    }
];

var result = joi.validate(objTest, altSchema);

var resultArrTest = joi.validate(arrTest, altSchema);

var resultFailingArrTest = joi.validate(failingArrTest, altSchema);

console.log(result);

console.log(resultArrTest);

console.log(resultFailingArrTest);
person Cuthbert    schedule 09.01.2017
comment
я проверю это первым - person kailash yogeshwar; 09.01.2017