在大猩猩 mux 路由器上设置 404 NotFound 处理程序
setup 404 NotFound handler on a gorilla mux router
这是我用 Go 语言和 gorilla mux 包编写的一个小型演示网络服务器的代码:
package main
import (
"fmt"
"github.com/gorilla/mux"
"net/http"
)
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 页面的方法。
但是我做不出一个r.HandleFunc("/",...) 但是会太贪心了
将 NotFoundHandler
设置为 returns 您的自定义 404 页面的处理程序方法。
Router 导出一个 NotFoundHandler
字段,您可以将其设置为自定义处理程序。
r := mux.NewRouter()
r.NotFoundHandler = MyCustom404Handler
有时,您会花费大量时间来构建一堆中间件,这些中间件会执行许多操作,例如记录日志、发送指标等等...而默认的 404 处理程序只是跳过所有中间件。
我能够通过 re-setting 默认的 404 处理程序解决这个问题,如下所示:
router := mux.NewRouter()
router.Use(someMiddleware())
// Re-define the default NotFound handler
router.NotFoundHandler = router.NewRoute().HandlerFunc(http.NotFound).GetHandler()
现在,404 默认处理程序也将通过所有中间件。
r := mux.NewRouter()
h := http.HandlerFunc(NotFound)
r.NotFoundHandler = h
func NotFound(w http.ResponseWriter, r *http.Request) {
}
这是我用 Go 语言和 gorilla mux 包编写的一个小型演示网络服务器的代码:
package main
import (
"fmt"
"github.com/gorilla/mux"
"net/http"
)
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 页面的方法。
但是我做不出一个r.HandleFunc("/",...) 但是会太贪心了
将 NotFoundHandler
设置为 returns 您的自定义 404 页面的处理程序方法。
Router 导出一个 NotFoundHandler
字段,您可以将其设置为自定义处理程序。
r := mux.NewRouter()
r.NotFoundHandler = MyCustom404Handler
有时,您会花费大量时间来构建一堆中间件,这些中间件会执行许多操作,例如记录日志、发送指标等等...而默认的 404 处理程序只是跳过所有中间件。
我能够通过 re-setting 默认的 404 处理程序解决这个问题,如下所示:
router := mux.NewRouter()
router.Use(someMiddleware())
// Re-define the default NotFound handler
router.NotFoundHandler = router.NewRoute().HandlerFunc(http.NotFound).GetHandler()
现在,404 默认处理程序也将通过所有中间件。
r := mux.NewRouter()
h := http.HandlerFunc(NotFound)
r.NotFoundHandler = h
func NotFound(w http.ResponseWriter, r *http.Request) {
}