尚未找到适合我的案例的任何有效解决方案,因此我正在创建一个新的解决方案。 我有这个架构:
function getParts1() {
return {
common: joi.object({
common_key: joi.number().integer().required(),
common_conditional: joi.string().valid("AB", "CD", "EF").required(),
common_value1: joi.string().max(144).required(),
}),
variation1: joi.object({
field1: joi.number().allow(0).required(),
field2: joi.string().max(255).allow("").required(),
}),
variation2: joi.object({
another_field1: joi.number().allow(0).required(),
another_field2: joi.string().max(255).allow("").required(),
}),
variation3: joi.object({
super_another_field1: joi.number().allow(0).required(),
super_another_field2: joi.string().max(255).allow("").required(),
}),
};
}
function getParts2() {}; //And much more functions like getParts1 with the same keys but different objects as values
我需要创建一个可以通过以下方式处理此类函数的输出的函数:
common
部分。common_conditional
的值。在此示例中,我需要从 array.common
if array.variation1
、array.common.common_conditional == "AB"
if variation2
等合并到 "CD"
键。它还可以更多。由于每个
joi.object(...)
的variation
的差异,我找不到解决这个问题的方法。例如,对于上面的代码,如果将创建这样的模式:
Parts
它应该通过 res1 和 res2,但 res3 应该抛出
const schema = getSchemaFromParts(getParts1());
const data1 = {
common_key: 12,
common_conditional: "AB",
common_value1: "somevalue",
field1: 14,
field2: "Value for field2"
}
const data2 = {
common_key: 16,
common_conditional: "CD",
common_value1: "somevalue2",
another_field1: 18,
another_field2: "Hello world"
}
const data3 = {
common_key: 16,
common_conditional: "EF",
common_value1: "somevalue3",
another_field1: 20,
another_field2: "Broken data"
}
const res1 = schema.validate(data1);
const res2 = schema.validate(data2);
const res3 = schema.validate(data3);
console.log(res1.error)
console.log(res2.error)
console.log(res3.error)
的错误。 对于这种情况有什么解决方案吗,或者也许最好为
ValidationError: "another_field1" is not allowed { …(2) }
函数创建不同的架构?Parts