首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何修改Joi对象中的现有键

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

Stack Overflow用户
提问于 2019-01-30 17:58:43
回答 1查看 2.4K关注 0票数 0

Joi验证不支持修改现有对象键。

我正在对父类和子类使用Joi验证。父级的验证是所有子级的基本验证,但每个子级都有特定的限制或附加字段。我希望能够只使用我的父Joi对象,并且能够修改现有的键以满足特定的限制。

代码语言:javascript
运行
复制
//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在这里不是正确的函数,但我不确定如何做到这一点。我希望得到的子验证看起来像这样:

代码语言:javascript
运行
复制
const child = {
    foo: Joi.string(),
    myArray: Joi.array().max(10).min(1).required()
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-30 20:53:34

您是否尝试过:

代码语言:javascript
运行
复制
const child = parent.append({
    foo: Joi.string(),
    myArray: parent.myArray.min(1).required()
});

刚刚尝试过:

代码语言:javascript
运行
复制
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

已在Nodev8.10.0上尝试使用新的npm i joi (软件包显示:"joi": "^14.3.1")。或者,也许你给出的例子太琐碎,不能反映你的真实场景?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54437782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档