hapi-swagger ui是否为枚举提供onChange事件验证?

时间:2018-03-22 18:53:27

标签: node.js hapijs hapi-swagger

我有一个API /v1/test/{note?}我为此添加了以下代码。

module.exports = [
       {
        method: 'POST',
        path: '/v1/test/{note?}',            
        config: {
            description: 'Greet user',
            notes: ['Use to greet a user'],
            tags: ['api'],
            handler: defaultHandler,
            timeout:{
                server:3000
            },
            validate: {
                params: {
                    note: Joi.string()
                        .required()
                        .valid(['param1', 'param2', 'param3'])
                        .description('Notes')

                    a: Joi.string().required().description('for param2')

                    b: Joi.string().required().description('for param3')
                },
                headers: {
                    name: Joi.string().required()
                },options: {
                    allowUnknown: true
                }
            }                               
        }
    }
];

在Swagger UI中,如果我从下拉列表中选择param2,那么ui应该显示 a ,如果我选择param3 ui应该显示 b 或者param1应该是显示名称(标题参数)

1 个答案:

答案 0 :(得分:0)

您可以使用Joi验证来定义条件 https://github.com/hapijs/joi/blob/v13.1.2/API.md#anywhencondition-options

{
  note: Joi.string()
     .required()
     .valid(['param1', 'param2', 'param3'])
     .description('Notes'),
  a: Joi.string()
     .description('for param2')
     .when('note', { is: 'param2', then: Joi.required() }),
  b: Joi.string()
     .description('for param3')
     .when('note', { is: 'param3', then: Joi.required() }),
}

hapi-swagger并不完全支持when实际上是alternatives

有一系列无法​​移植到swagger的功能 https://github.com/glennjones/hapi-swagger/blob/master/usageguide.md#features-from-hapi-that-cannot-be-ported-to-swagger