使用golang和mux制作自定义404

时间:2017-04-25 14:20:41

标签: go gorilla mux

这是关于golang和mux的一个小例子webserver的代码:

package main

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

func handler(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
fmt.Fprintf(w, "Hi there, I love %s!", vars["username"])
}

func homeHandler(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/" {
        errorHandler(w, r, http.StatusNotFound)
        return
    }
    vars := mux.Vars(r)
    fmt.Fprintf(w, "Hi there, I love %s!", vars["username"])
}

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/help/{username}/", handler)
    http.Handle("/", r)
    http.ListenAndServe(":8080", nil)
}

但我找不到如何制作自定义404页面的方法,我想制作自定义404。

但是我不能制作一个r.HandleFunc(" /",......)但是太贪心了。

如果有人有任何想法。

4 个答案:

答案 0 :(得分:5)

Router导出NotFoundHandler字段,您可以将其设置为自定义处理程序。

r := mux.NewRouter()
r.NotFoundHandler = MyCustom404Handler

答案 1 :(得分:2)

NotFoundHandler设置为返回自定义404页面的处理程序方法。

答案 2 :(得分:1)

有时候,您花费大量时间来构建一堆中间件,该中间件执行许多操作,例如日志记录,发送指标等等。而默认的404处理程序只会跳过所有中间件。

我能够通过重新设置默认的404处理程序来解决此问题:

router := mux.NewRouter()
router.Use(someMiddleware())
// Re-define the default NotFound handler
router.NotFoundHandler = router.NewRoute().HandlerFunc(http.NotFound).GetHandler()

现在,404默认处理程序也将遍历所有中间件。

答案 3 :(得分:1)

r := mux.NewRouter()

h := http.HandlerFunc(NotFound)
r.NotFoundHandler = h
    
func NotFound(w http.ResponseWriter, r *http.Request) {
        
}