如何修改Joi对象中的现有键

时间:2019-01-30 09:58:43

标签: node.js validation joi

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()
}

1 个答案:

答案 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")。还是您所举的例子太琐碎而无法反映您的真实情况?