使用golang和mux制作自定义404

use*_*794 0 go mux gorilla

这是我的代码,关于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)
}
Run Code Online (Sandbox Code Playgroud)

但我没有找到如何做自定义404页面的方法,我想做一个自定义404.

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

如果有人有任何想法.

Jor*_*lot 8

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

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

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

现在,404 默认处理程序也通过所有中间件。


mko*_*iva 5

路由器导出一个NotFoundHandler,你可以设置为自定义处理程序领域.

r := mux.NewRouter()
r.NotFoundHandler = MyCustom404Handler
Run Code Online (Sandbox Code Playgroud)