404 は Goji によって返されません。Goji からの 404 はすべて、Logger
ミドルウェアによってコンソール (stdout) に記録される必要があります。要求を Goji ルーターに渡すアップストリーム ハンドラーが、そうでないものをバウンスしてい/api/list
ます。
これは、より寛大な一致で修正できます。
package main
import (
"fmt"
"net/http"
"github.com/zenazn/goji/web"
"github.com/zenazn/goji/web/middleware"
)
func main() {
mux := web.New()
http.Handle("/api/", mux)
mux.Use(middleware.EnvInit)
mux.Use(middleware.Logger)
mux.Get("/api/list/:id", debugHandler)
mux.Get("/api/list", debugHandler)
mux.Post("/api/list", debugHandler)
// If Goji's router 404's, we should call our custom handler, and it
// should also be apparent in the logs.
mux.NotFound(notFoundHandler)
http.ListenAndServe(":8000", nil)
}
func debugHandler(c web.C, w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "%v\n", r.URL.Path)
}
func notFoundHandler(c web.C, w http.ResponseWriter, r *http.Request) {
http.Error(w, fmt.Sprintf("Goji 404: %s", r.URL.Path), 404)
}
より寛大な一致を提供するために、アップストリームhttp.Handle
をに変更したことに注意してください。ルーターは非常に単純で、作成した Goji マルチプレクサー インスタンスに到達する前に 404 と一致しないためhttp.Handle("/api/", mux)
( IDなど) 。net/http
/api/list/131313
/api/list
それが役立つことを願っています。