10

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() })
            } 
        }
    }
});

これまでのJoiオブジェクトの検証は、上記の config: validate: code セクションで確認できます。入ってくる 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'
}

上記の JSON では、オブジェクトのルートにあるキーと値が必要であり、呼び出されるセクションids_lot_argsが必要です。peripheral_data で始まるセクションは、そこにあるかどうか、または他の JSON ペイロードである可能性があります。重要ではありません。ルート レベルと値内のキーと値のみids_lot_argsが必要です。

これまでのところ、私はJoi検証を機能させようとしてつまずいています。 これをどのようにセットアップする必要があるかについてのアイデアはありますか? Joi のコード リポジトリはhttps://github.com/hapijs/joiにあります。これまでのところ、オブジェクトのすべての関数を許可しようとしても役に立ちませんでした。

4

3 に答える 3

8

オブジェクトでunknown()関数を呼び出すだけです。value

var schema = Joi.object({
  key: Joi.string().required(),
  value: Joi.object({
    ids_lot_args: Joi.object().required()
  }).unknown().required()
});
于 2014-08-17T02:36:15.053 に答える
3

「allowUnknown」パラメーターを使用できます。

validate : {
  options : {
    allowUnknown: true
  },
  headers : {
  ...
  },
  params : {
  ...
  },
  payload : {
  ...
  }
}

}

于 2015-06-08T14:22:07.300 に答える
1

Joi.any() を使ってみてください

server.route({
    method: 'POST',
    path: '/converge',
    handler: function (request, reply) {
        consociator.consociate(request.payload)
            .then (function (result) {
                reply (200, result);
            });
    },
    config: {
        validate: {
            payload: {
                key: Joi.string().required(),
                value: Joi.object({
                  ids_lot_args: Joi.object().required(),
                  peripheral_data: Joi.any()
                })
            } 
        }
    }});
于 2014-09-24T17:48:25.210 に答える