当使用Joi和Hapi时,如何在一个键上设置要求但允许任何和所有其他键?

Adr*_*ron 10 javascript validation json hapijs

我正在尝试为进入Hapi处理程序的JSON对象编写Joi验证.到目前为止代码看起来像这样:

server.route({
    method: 'POST',
    path: '/converge',
    handler: function (request, reply) {
        consociator.consociate(request.payload)
            .then (function (result) {
                reply (200, result);
            });
    },
    config: {
        validate: {
            payload: {
                value: Joi.object().required().keys({ knownid: Joi.object() })
            } 
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

到目前为止,您可以在上面的config:validate:code部分中看到Joi对象验证.进入的JSON看起来像这样.

"key": '06e5140d-fa4e-4758-8d9d-e707bd19880d-testA',
"value": {
    "ids_lot_args": {
        "this_id": "stuff",
        "otherThign": "more data"
    },
    "peripheral_data": 'Sample peripheral data of any sort'
}
Run Code Online (Sandbox Code Playgroud)

在上面的JSON中,需要对象根目录的键和值,并且ids_lot_args需要调用的部分.以peripheral_data开头的部分可以在那里,也可以是任何其他JSON有效负载.没关系,只ids_lot_args需要根级别和值内部的键和值.

到目前为止,我一直在努力让Joi验证工作. 有关如何设置的任何想法?Joi的代码仓库位于https://github.com/hapijs/joi,如果想要查看它.到目前为止,我一直在尝试允许对象上的所有函数无效.

Ger*_*osi 8

您只需要unknown()value对象上调用该函数:

var schema = Joi.object({
  key: Joi.string().required(),
  value: Joi.object({
    ids_lot_args: Joi.object().required()
  }).unknown().required()
});
Run Code Online (Sandbox Code Playgroud)