проверьте, является ли входная переменная строкой или массивом, используя joi

У меня есть api, который в прошлых разработках получал строки, разделенные запятыми, как допустимый ввод, и использовал следующее в качестве валидатора: Joi.string()

Но теперь я хочу реализовать ту же переменную, используя массив строк, как указано здесь https://github.com/glennjones/hapi-swagger/issues/119. Итак, новый чек будет:

Joi.array().items(Joi.string())

Но я не хочу нарушать обратную совместимость кода. Есть ли способ проверить оба условия для переменной?

Я новичок в Joi, поэтому будем благодарны за любую помощь или руководство. Заранее спасибо.


person Jasjeet Kaur    schedule 05.11.2018    source источник


Ответы (2)


Взгляните на .alternatives().try(), который поддерживает несколько схем для одного поля. .

Например:

Joi.alternatives().try(Joi.array().items(Joi.string()), Joi.string())

Это будет проверять как массивы строк, так и простые строки, однако, как я уверен, вы знаете, вам все равно понадобится логика на стороне сервера, чтобы проверить, в каком формате это значение, чтобы вы могли его правильно обработать.

person Ankh    schedule 06.11.2018

Вы можете использовать alternatives.try или сокращенно [schema1, schema2]

const Joi = require('joi');

const schema1 = {
    param: Joi.alternatives().try(Joi.array().items(Joi.string()), Joi.string())
};

const result1 = Joi.validate({param: 'str1,str2'}, schema1);
console.log(result1.error); // null

const result2 = Joi.validate({param: ['str1', 'str2']}, schema1);
console.log(result2.error); // null


const schema2 = {
    param: [Joi.array().items(Joi.string()), Joi.string()]
};

const result3 = Joi.validate({param: 'str1,str2'}, schema2);
console.log(result3.error); // null

const result4 = Joi.validate({param: ['str1', 'str2']}, schema2);
console.log(result4.error); // null
person gump    schedule 06.11.2018
comment
Ваш ответ тоже правильный, но я выбрал @Ankh, потому что он пошел первым. - person Jasjeet Kaur; 06.11.2018
comment
@JasjeetKaur Ничего страшного :) - person gump; 06.11.2018