我想将httprouter与muxchain一起使用,同时保留/:user/.以下面的例子为例:func log(res http.ResponseWriter, req *http.Request) { fmt.Println("some logger")}func index(res http.ResponseWriter, req *http.Request) { fmt.Fprintf(res, "Hi there, I love %s!", req.URL.Path[1:])}func main() { logHandler := http.HandlerFunc(log) indexHandler := http.HandlerFunc(index) chain := muxchain.ChainHandlers(logHandler, indexHandler) router := httprouter.New() router.Handler("GET", "/:user", chain) http.ListenAndServe(":8080", router)}当我访问时,http://localhost:8080/john我显然无法访问ps httprouter.Params 那是因为 httprouter 需要查看 typehttprouter.Handle但该函数是使用 type 调用的http.Handler。有什么办法可以同时使用这两个包吗?HttpRouter GitHub 存储库说唯一的缺点是,当使用 http.Handler 或 http.HandlerFunc 时,无法检索任何参数值,因为没有有效的方法来传递带有现有函数参数的值。
2 回答
汪汪一只猫
TA贡献1898条经验 获得超8个赞
您必须修补 muxchain 以接受httprouter.Handle,但创建自己的链处理程序相当简单,例如:
func chain(funcs ...interface{}) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
for _, h := range funcs {
switch h := h.(type) {
case httprouter.Handle:
h(w, r, p)
case http.Handler:
h.ServeHTTP(w, r)
case func(http.ResponseWriter, *http.Request):
h(w, r)
default:
panic("wth")
}
}
}
}
- 2 回答
- 0 关注
- 204 浏览
添加回答
举报
0/150
提交
取消