使用Joi(Param和Query)进行路由验证

时间:2016-03-15 03:05:14

标签: validation routes params hapijs joi

我正在尝试

  1. 验证路径
  2. 根据参数的字符数,我应该能够附加查询字符串
  3. 例如: - 如果参数字符数小于4 - 并且添加查询字符串应该返回404

    但是如果param char count等于4 - 并且添加查询字符串应该返回200

    所以基本上只有在param的char计数等于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)
                   }
               }
           }
       },
    

1 个答案:

答案 0 :(得分: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)
           }
       }
   }

}