我正在尝试创建一个将接受此验证的架构:
A:
{
"user_token": "test",
"accounts":{
"any_key":[0, 1]
}
}
或这个 B:
{
"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
需要单个子数组而不指定键?
答案 0 :(得分:0)
您非常亲密。缺少的部分是使用object.min()
指定accounts
对象中允许的最小键数。在您的情况下,最小键数为1
。
const statementsSchema = {
body: Joi.object({
user_token: Joi.string().required(),
accounts: Joi.object().pattern(/./, Joi.array()).min(1).required()
})
};