【问题标题】:GAE Golang Gorilla mux - 404 page not foundGAE Golang Gorilla mux - 404 页面未找到
【发布时间】:2012-12-14 09:37:24
【问题描述】:

我在 GAE 中使用 gorilla mux 时遇到了一些问题。

当我尝试时,我发现“找不到 404 页面”。 rootHandler 函数没有被调用(没有产生任何痕迹)

以下是我的部分代码,有什么想法吗?

提前考虑

...
    func init() {
     r := mux.NewRouter()
     r.HandleFunc("/",rootHandler)
    }
    func rootHandler(w http.ResponseWriter, r *http.Request) {
     var functionName = "rootHandler"
     c := appengine.NewContext(r)
     c.Infof(functionName+"-start")
     defer c.Infof(functionName+"-end")
...

【问题讨论】:

    标签: google-app-engine go mux


    【解决方案1】:

    您必须将请求路由到您的多路复用路由器。 http 包有 DefaultServeMux 被 AppEngine 使用,但 mux 没有。 (并且它本身并没有向net/http 注册其路由)

    也就是说,您所要做的就是将您的mux 路由器注册到net/http

    func main() {
        r := mux.NewRouter()
        r.HandleFunc("/", HomeHandler)
        r.HandleFunc("/products", ProductsHandler)
        r.HandleFunc("/articles", ArticlesHandler)
        http.Handle("/", r)
    }
    

    (直接来自文档)

    这里重要的部分是http.Handle("/", r)

    【讨论】:

      【解决方案2】:

      您也可以将路由器作为第二个参数传递给ListenAndServe,因为它实现了http.Handler 接口。

      router := mux.NewRouter()
      router.HandleFunc("/", HomeHandler)
      http.ListenAndServe(":8080", router) // pass the router here
      

      【讨论】: