使用Joi/Hapi,如何验证所有密钥的哈希条目?

pfo*_*oti 2 hapijs joi

我想允许我的前端将值的哈希值推送到后端.散列可以具有任何(JSON合法)密钥,但每个密钥的值必须适合特定的模式.把它想象成:

extended: {
  tubers: {
    potato: {weight: 1, cost: 2},
    yam: {weight: 1, cost: 1}
  }
}
Run Code Online (Sandbox Code Playgroud)

所以扩展对象有块茎场.块茎领域有许多键,但每个值必须具有整数的权重和成本.

我似乎无法将其映射到我的普通Joi对象模式框架中.

Ger*_*osi 5

您可以Joi.object().pattern()用来验证未知密钥:

var schema = {
    extended: {
        tubers: Joi.object().pattern(/^\w+$/, Joi.object().keys({
            weight: Joi.number().required(),
            cost: Joi.number().required()
        }).unknown())
    }
};
Run Code Online (Sandbox Code Playgroud)

如果你不希望允许其他按键比weightcost,然后删除.unknown().