Joi验证不支持修改现有对象键。
我将Joi验证用于父级和子级。对父级的验证是对所有子级的基本验证,但是每个子级都有特定的限制或其他字段。 我希望能够只带上我的父级Joi对象,并能够修改现有键以适应某些限制。
//Declare base class with an array at most 10 elements
const parent = {
myArray: Joi.array().max(10)
}
//Now declare child with minimum 1 array value
const child = parent.append({
foo: Joi.string(),
myArray: Joi.array().min(1).required()
})
上面的代码按预期工作-意味着子对象没有对父对象保留.limit(10)限制。 但是,我希望做到这一点。我确定append不是在此处使用的正确函数,但是我不确定如何执行此操作。 我希望得到的子验证如下所示:
const child = {
foo: Joi.string(),
myArray: Joi.array().max(10).min(1).required()
}
答案 0 :(得分:1)
您尝试过吗:
const child = parent.append({
foo: Joi.string(),
myArray: parent.myArray.min(1).required()
});
只需尝试:
const Joi = require('joi');
const parent = {
x: Joi.array().max(10).required()
};
const child = Object.assign({}, parent, {
x: parent.x.min(1).required(),
y: Joi.string()
});
Joi.validate({
x: [],
y: 'abc'
}, child); // fails as .min(1) not satisfied
Joi.validate({
x: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
y: 'abc'
}, child); // fails as .max(10) not satisfied
Joi.validate({
x: [1],
y: 'abc'
}, child); // OK
在节点v8.10.0上尝试使用新的npm i joi
(程序包说:"joi": "^14.3.1"
)。还是您所举的例子太琐碎而无法反映您的真实情况?