gpt4 book ai didi

go - 嵌套的 Gorilla Mux 路由器不工作

转载 作者:IT王子 更新时间:2023-10-29 01:15:39 26 4
gpt4 key购买 nike

使用下面的代码,当我访问/test2 时它响应 404 - 未找到。/test1 工作正常。这是为什么?尽管路由器实现了http.Handler 接口(interface),但不允许嵌套吗?

package main

import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)

func main() {

mainRouter := mux.NewRouter()
subRouter := mux.NewRouter()

mainRouter.HandleFunc("/test1", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "test1") })

subRouter.HandleFunc("/test2", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "test2") })

mainRouter.Handle("/", subRouter)

http.ListenAndServe(":9999", mainRouter)
}

编辑:

我的主要目标是添加一些初始工作,这对 subRouter 中的所有路由都是通用的,并且只对它们有用。更具体地说,我想使用 Negroni作为我的中间件编排器。Negroni 网站上有一个将中间件添加到路由组的示例:

router := mux.NewRouter()
adminRoutes := mux.NewRouter()
// add admin routes here

Create a new negroni for the admin middleware
router.Handle("/admin", negroni.New(
Middleware1,
Middleware2,
negroni.Wrap(adminRoutes),
))

Negroni 基本上执行每个参数的 ServeHTTP 方法,因为它们都实现了 http.Handler。它按顺序执行它们,因此路由器路由将在最后。

我熟悉 Mux 中 Subrouter 的概念,但是据我所知,我不能像上面的例子那样使用它,特别是,我不能在 mainRouter 和它的之间注入(inject)任何东西子路由器。这就是嵌套看起来更灵活的原因。

最佳答案

我知道这个问题有点老了,但我花了一些时间弄清楚处理程序和匹配在 go 中是如何工作的。可以看我的实验代码here .

基本上,你可以用这样的代码得到你想要的效果:

package main

import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)

func main() {

mainRouter := mux.NewRouter()
subRouter := mux.NewRouter()

mainRouter.HandleFunc("/test1", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "test1")
})
subRouter.HandleFunc("/test2", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "test2")
})

// in mux, you need to register subrouter
// with the same path that the handlers in
// it are matching
mainRouter.Handle("/test2", subRouter)

// if your subrouter has handlers that match
// other sub paths - you also need to do this
mainRouter.Handle("/test2/{_dummy:.*}", subRouter)

http.ListenAndServe(":9999", mainRouter)
}

我希望这对某人有帮助。

关于go - 嵌套的 Gorilla Mux 路由器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25107763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com