为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 HttpRouter 与 MuxChain 一起使用?

如何将 HttpRouter 与 MuxChain 一起使用?

Go
千巷猫影 2021-08-16 19:01:48
我想将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")

            }


        }

    }

}


查看完整回答
反对 回复 2021-08-16
  • 2 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信