404 не возвращается Goji-any 404 из Goji должен быть зарегистрирован на консоль (stdout) промежуточным программным обеспечением Logger
. Обработчик обработчика восходящего потока, передающий запросы на маршрутизатор 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
к http.Handle("/api/", mux)
, чтобы обеспечить более мягкий матч. Маршрутизатор net/http
очень прост и потому, что /api/list/131313
(например, с идентификатором) не соответствует /api/list
его 404, прежде чем он даже попадет на экземпляр мух Goji, который вы создали.
Надеюсь, что это поможет.
Отлично - это было именно оно. Большое спасибо за вашу помощь! –