如何在fasthttprouter中使用请求参数替代路径参数?
别担心,完全没问题!fasthttprouter不仅支持路径参数,处理常规的URL查询参数也是小菜一碟,只是玩法和路径参数有点不一样,我给你拆解清楚:
具体实现步骤
1. 修改路由定义
因为查询参数是放在URL的?后面,不属于路径的一部分,所以你需要把原来带动态参数的路由改成固定路径:
router.GET("/customer/account/detail", myHandler.customerAccountDetailHandler)
这样不管查询参数是什么,只要路径是/customer/account/detail,就会匹配到这个Handler。
2. 在Handler中读取查询参数
参数的获取是通过fasthttp的RequestCtx对象完成的,它提供了一系列便捷方法来处理查询参数。给你一个完整的Handler示例:
func (h *MyHandler) customerAccountDetailHandler(ctx *fasthttp.RequestCtx) { // 获取accountId参数,返回[]byte类型,转成字符串使用 accountId := string(ctx.QueryArgs().Get("accountId")) // 校验必填参数 if accountId == "" { ctx.Error("accountId 参数不能为空", fasthttp.StatusBadRequest) return } // 获取sort参数,转为无符号整数,参数不存在或格式非法时返回0 sort := ctx.QueryArgs().GetUintOrZero("sort") // 这里编写你的业务逻辑,比如根据accountId查询账户详情 ctx.Success("application/json", []byte(fmt.Sprintf(`{"accountId":"%s", "sort":%d, "msg":"查询成功"}`, accountId, sort))) }
常用的参数处理方法
fasthttp的QueryArgs()返回的Args对象还有很多实用方法:
ctx.QueryArgs().Get("key"):获取字符串类型参数,返回[]bytectx.QueryArgs().GetInt("key", defaultValue):获取整数类型参数,可指定默认值ctx.QueryArgs().GetBool("key"):获取布尔类型参数ctx.QueryArgs().Has("key"):判断某个参数是否存在
其实查询参数的处理是fasthttp原生支持的能力,fasthttprouter作为路由框架完全兼容这种用法,只要把路由路径设为固定值,剩下的参数读取交给fasthttp的RequestCtx就好啦。
内容的提问来源于stack exchange,提问作者antonof
相关产品推荐
相关产品推荐

