10

我在 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")
...
4

2 回答 2

31

您必须将请求路由到您的多路复用路由器。httpAppEngine 使用的包有DefaultServeMux,但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).

于 2012-12-29T15:03:44.250 回答
1

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

router := mux.NewRouter()
router.HandleFunc("/", HomeHandler)
http.ListenAndServe(":8080", router) // pass the router here
于 2021-12-13T15:33:25.460 回答