javascript - 如何处理 Joi 中的嵌套时间?
问题描述
我试图期待一个像下面这样的对象,其中只有在未发送主要数据时才允许数据。
{
"action": {
"primary": "",
"data": {}
}
}
我试过这个模式:
Joi.object({
action: Joi.object({
primary: Joi.any(),
data: Joi.any(),
})
.when(Joi.object({
action: Joi.object({
primary: Joi.exist()
})
}), {
then: Joi.object({
primary: Joi
.string()
.required(),
data: Joi.any().forbidden()
}),
otherwise: Joi.object({
primary: Joi.any().forbidden(),
data: Joi.object()
.required()
})
})
});
它总是出现在我的otherwise
陈述中。其他语法也总是失败:.when('primary', { is: Joi.exist(), then:
当我尝试.when('action.primary', { is: Joi.exist(), then:
时,Joi 本身会出错AssertionError [ERR_ASSERTION]: Item cannot come after itself: action
解决方案
我可以建议以下重构吗?
Joi.object({
action: Joi.object({
primary: Joi.string(),
data: Joi.object().when("primary", {
is: Joi.exist(),
then: Joi.forbidden(),
otherwise: Joi.required()
})
})
});
它允许这两个对象:
{
action: {
data: {}
}
};
{
action: {
primary: "value"
}
};
注意:https ://github.com/legraphista/joi-tester是一个很酷的项目,用于在不设置应用程序的情况下验证 Joi 配置。
推荐阅读
- ruby - 管理 ruby gems 的系统依赖(例如 mysql2 和 openssl)
- azure-functions - 对 Graph 的 Azure Function 订阅
- python - 如何将 Pandas DataFrame 加载到 TensorFlow 中以进行高效的批量训练?
- r - 根据 tibble 中的数据发送电子邮件
- unix - 根据匹配字段删除第一个重复行并保留第二个匹配行
- xamarin.ios - IOS13如何发送静默推送通知?自更新后不起作用(Xamarin.ios)
- python-3.x - python从命令行训练和测试模型
- .htaccess - 使用 htpasswd 一次性登录
- c# - 如何修复 LINQ 查询?(不适用于 EF Core 3.0)
- three.js - 在网格上找到一定半径内的顶点的最有效方法是什么?