проверьте, является ли входная переменная строкой или массивом, используя joi - PullRequest
0 голосов
/ 05 ноября 2018

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

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

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

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

Я новичок в Джой, поэтому любая помощь или руководство будут оценены. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 ноября 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
0 голосов
/ 06 ноября 2018

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

Например:

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

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

...