gpt4 book ai didi

hapijs - Joi 验证设置默认为空对象

转载 作者:行者123 更新时间:2023-12-04 17:52:47 27 4
gpt4 key购买 nike

我在 Joi 验证方面遇到了一个问题(或者我认为是一个问题)。如果它作为请求正文的一部分传递,我正在尝试为不存在的键分配一个值。

例如:

parameters: Joi.object().keys({
keyA: Joi.string().allow('').allow(null).default(null),
keyB: Joi.object().keys({
b1: Joi.string(),
b2: Joi.string(),
b3: Joi.object().keys({
b3_1: Joi.string(),
b3_2: Joi.string(),
b3_3: Joi.string()
})
}).default({}),
keyC: Joi.object().keys({
c1: Joi.number(),
c2: Joi.number(),
c3: Joi.boolean(),
c4: Joi.boolean()
}).default({}),
keyD: Joi.object().keys({
d1: Joi.number(),
d2: Joi.number()
}).default({}),
keyE: Joi.object().keys({
e1: Joi.number()
}).default({})
}).allow(null)

所以具体来说,如果我要传入:
{
keyA: "foo",
keyD: {
d1: 21.9,
d2: 21.1
},
keyE: {
e1: 42
}
}

我会得到这个作为返回
{
keyA: "foo",
keyB: {},
keyC: {},
keyD: {
d1: 21.9,
d2: 21.1
},
keyE: {
e1: 42
}
}

:eyes: 在空物体上。我在 Joi.default() 方法中遗漏了什么?我是否过度扩展了 Joi 的含义?

最佳答案

我首先要指出您问题中的架构不是有效的 JavaScript,您在声明 keyC 的规则之前关闭了太多括号。 .我假设这只是问题的格式错误,并且您的实际模式当前有效。

其次,您声明默认值的方式没有任何问题......它工作得很好。我假设这是您验证问题的模式的方式。

尝试运行这个。我模仿了 the docs for default() 中的验证方法.

const schema = Joi.object().keys({
keyA: Joi.string().allow('').allow(null).default(null),
keyB: Joi.object().keys({
b1: Joi.string(),
b2: Joi.string(),
b3: Joi.object().keys({
b3_1: Joi.string(),
b3_2: Joi.string(),
b3_3: Joi.string()
})
}).default({}),
keyC: Joi.object().keys({
c1: Joi.number(),
c2: Joi.number(),
c3: Joi.boolean(),
c4: Joi.boolean()
}).default({}),
keyD: Joi.object().keys({
d1: Joi.number(),
d2: Joi.number()
}).default({}),
keyE: Joi.object().keys({
e1: Joi.number()
}).default({})
}).allow(null);

Joi.validate({
keyA: "foo",
keyD: {
d1: 21.9,
d2: 21.1
},
keyE: {
e1: 42
}
}, schema, (err, value) =>
{
if (err)
throw err;

console.log(value);
});

我在控制台中得到了这个:
{
keyA :'foo',
keyD: {
d1: 21.9,
d2: 21.1
},
keyE: {
e1: 42
},
keyB: {},
keyC: {}
}

这些键不太可能看起来像您预期的输出那样有序,但这应该无关紧要,因为 object keys are not ordered反正。

关于hapijs - Joi 验证设置默认为空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43106819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com