查询params依赖于hapi-swagger中的其他查询参数

时间:2017-10-05 19:33:29

标签: swagger hapijs hapi-swagger

我正在为我的api建立一个hapi-swagger界面。其中一个查询参数 type 有另一个查询参数 subtype ,它取决于前者。我已经找到了如何实现Joi validation for it successfully但是在界面上没有那么成功。我的验证码是

{
    type: Joi.string()
         .valid('image', 'publication', 'dataset')
         .optional(),

    subtype: Joi.string()
         .optional()
         .when('type', {is: 'image',       then: Joi.valid('png', 'jpg')})
         .when('type', {is: 'publication', then: Joi.valid('newspaper', 'book')})
         .description('subtype based on the file_type')
}

但界面仅为子类型显示 png jpg 。关于如何实现这一点的建议,以便正确的子类型显示何时选择了相应的类型

1 个答案:

答案 0 :(得分:0)

我尝试了类似的东西,它对我来说很好。请查看下面的代码:

Joi.object().keys({
  billFormat: Joi.string().valid('sms', 'email').required(),
  email: Joi.string()
    .when('ebillFormat', { is: 'sms', then: Joi.valid('a', 'b') })
    .when('ebillFormat', { is: 'email', then: Joi.valid('c', 'd') }),
});

我的有效载荷如下所示:

{
    "ebillFormat": "email",
    "email": "hello"
}

我得到的错误如下:

{
    "statusCode": 400,
    "error": "Bad Request",
    "message": "child \"email\" fails because [\"email\" must be one of [c, d]]",
    "validation": {
        "source": "payload",
        "keys": [
            "email"
        ]
    }
}

请让我知道您的目标是什么,以及您面临的问题。