libhv icon indicating copy to clipboard operation
libhv copied to clipboard

路由的占位符解析和查询参数的解析覆盖问题

Open zixiai opened this issue 1 year ago • 4 comments

router.cpp示例中: https://github.com/ithewei/libhv/blob/0325f2d07f10986139174ff2db75dd151c09b605/examples/httpd/router.cpp#L131-L134

这里路由占位符的解析是在Handler::restful中调用了HttpContext的param,即HttpRequest的GetParam: https://github.com/ithewei/libhv/blob/0325f2d07f10986139174ff2db75dd151c09b605/examples/httpd/handler.cpp#L171-L179

这个方法是查询参数的解析,这样合在一起会导致这里占位符的解析覆盖了查询参数的解析,如对于/api/test/{str},会导致 GET http://ip:port/api/test/xxx?str=yyy 后,服务器获取查询参数param("str")时,xxx会覆盖yyy

zixiai avatar Jun 20 '24 03:06 zixiai

为了使用简单,所以不管是url里的还是query_string里的参数都是解析后保持在query_params里,通过GetParam获取,建议使用不同的参数名区分下。

ithewei avatar Jun 20 '24 06:06 ithewei

好的,不过个人认为还是做个区分比较好,后面加个getRoute的接口可以考虑吗?

zixiai avatar Jun 20 '24 06:06 zixiai

为了前向兼容性暂不考虑,如果是你个人fork后修改,我推荐命名GetUrlParam和GetQueryParam

ithewei avatar Jun 20 '24 07:06 ithewei

好的,如果是为前向兼容考虑的话,个人认为可以给路由和查询参数新建两个接口,其值也分别新建成员变量存储,旧的GetParam接口和query_params声明不推荐使用

zixiai avatar Jun 20 '24 07:06 zixiai