如何使用 Joi 嵌套所需的未知键值对象
How to have a nested required unknown key-value object with Joi
我正在尝试创建一个模式验证来接受这个:
甲:
{
"user_token": "test",
"accounts":{
"any_key":[0, 1]
}
}
或者这个
乙:
{
"user_token": "e29a64c4c9f08414cc2999a0166664f8",
"accounts":{
"some_other_key":[0, 1]
}
}
但不是这个
C:
{
"user_token": "e29a64c4c9f08414cc2999a0166664f8",
"accounts":{}
}
它基本上应该接受 accounts
下可以接受任何键值的对象。
我查看了 Joi's documentation 中的 .unknown
但我无法实现它,因为我试图实现它的对象是一个数组
const statementsSchema = {
body: Joi.object({
user_token: Joi.string().required(),
accounts: Joi.object({
Joi.array().unknown().required()
}).required()
})
}
我也尝试了 .pattern
,它几乎可以工作,但它不会强制要求 accounts
内的对象。
const statementsSchema = {
body: Joi.object({
user_token: Joi.string().required(),
accounts: Joi.object({}).pattern(/./, Joi.array()).required()
})
}
是否可以 accounts
在不指定键的情况下要求单个子数组?
你非常接近。缺少的部分是使用 object.min()
指定 accounts
对象中允许的最小键数。在您的情况下,最少的键数是 1
.
const statementsSchema = {
body: Joi.object({
user_token: Joi.string().required(),
accounts: Joi.object().pattern(/./, Joi.array()).min(1).required()
})
};
我正在尝试创建一个模式验证来接受这个:
甲:
{
"user_token": "test",
"accounts":{
"any_key":[0, 1]
}
}
或者这个 乙:
{
"user_token": "e29a64c4c9f08414cc2999a0166664f8",
"accounts":{
"some_other_key":[0, 1]
}
}
但不是这个 C:
{
"user_token": "e29a64c4c9f08414cc2999a0166664f8",
"accounts":{}
}
它基本上应该接受 accounts
下可以接受任何键值的对象。
我查看了 Joi's documentation 中的 .unknown
但我无法实现它,因为我试图实现它的对象是一个数组
const statementsSchema = {
body: Joi.object({
user_token: Joi.string().required(),
accounts: Joi.object({
Joi.array().unknown().required()
}).required()
})
}
我也尝试了 .pattern
,它几乎可以工作,但它不会强制要求 accounts
内的对象。
const statementsSchema = {
body: Joi.object({
user_token: Joi.string().required(),
accounts: Joi.object({}).pattern(/./, Joi.array()).required()
})
}
是否可以 accounts
在不指定键的情况下要求单个子数组?
你非常接近。缺少的部分是使用 object.min()
指定 accounts
对象中允许的最小键数。在您的情况下,最少的键数是 1
.
const statementsSchema = {
body: Joi.object({
user_token: Joi.string().required(),
accounts: Joi.object().pattern(/./, Joi.array()).min(1).required()
})
};