我有一个api,在过去的开发中,它将以逗号分隔的字符串作为有效输入,并使用以下内容作为验证器:
Joi.string()
但是现在我想使用这里https://github.com/glennjones/hapi-swagger/issues/119中提到的字符串数组来实现相同的变量。因此,新的支票将是:
Joi.array().items(Joi.string())
但是我不想破坏代码的向后兼容性。有没有办法检查变量的两个条件?
我是Joi的新手,因此将为您提供任何帮助或指导。预先感谢。
答案 0 :(得分:3)
看看.alternatives().try()
,它支持单个字段的多个架构。
例如:
*.jinja
这将同时验证字符串数组和纯字符串数组,但是,正如我确定您知道的那样,您仍然需要服务器端逻辑来检查值的格式,以便您可以正确处理它。
答案 1 :(得分:0)
您可以使用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