【问题标题】:Route Validation using Joi (Param and Query)使用 Joi 进行路由验证(参数和查询)
【发布时间】:2016-03-17 00:13:02
【问题描述】:

我正在尝试

  1. 验证路径
  2. 根据参数的字符数,我应该能够附加查询字符串

例如:- 如果参数字符数小于 4 - 并且添加查询字符串应返回 404

但如果参数字符数等于 4 - 并且添加查询字符串应返回 200

所以基本上只有当参数的字符数等于 4 时才允许查询字符串,否则不允许。

我不确定确切的方法,但我想我可以使用 Join.object().keys()。有人可以指导我吗?

谢谢

    {
       path: '/something/{param}/{slash*}',
       method: 'GET',
       config: {
           handler: Controller.method,
           validate: {
               params: {
                   filter : Joi.string().regex(/^[A-Za-z]{0,4}$/).required(),
                   slashes : Joi.string().regex(/^\/*$/)
               },
               query: {
                   page: Joi.number().default(1)
               }
           }
       }
   },

【问题讨论】:

    标签: validation routes params hapijs joi


    【解决方案1】:

    这不能仅靠 Joi 完成。 Joi 无法通过Joi.ref() 调用访问另一个参数的长度。你最好的办法是通过你的处理程序发送404

    {
       path: '/something/{param}/{slash*}',
       method: 'GET',
       config: {
           handler: function (request, reply) {
             if (request.params.param.length !== 4 && request.query.page)
               return reply(Boom.notFound())
    
             Controller.method.call(this, request, reply)
           },
           validate: {
               params: {
                   filter : Joi.string().regex(/^[A-Za-z]{0,4}$/).required(),
                   slashes : Joi.string().regex(/^\/*$/)
               },
               query: {
                   page: Joi.number().default(1)
               }
           }
       }
    

    }

    【讨论】:

    • 你理解我的问题是对的!非常感谢。作品。但是,如果有某种方法可以处理这样的依赖关系,那就太好了。
    猜你喜欢
    • 2020-09-16
    • 2016-07-07
    • 2015-12-05
    • 2020-05-11
    • 2020-08-04
    • 2014-11-30
    • 2018-06-25
    • 2020-03-01
    • 1970-01-01
    相关资源
    最近更新 更多