-- routes.go --package mainimport ("hotelsystem/pkg/config""hotelsystem/pkg/handlers""net/http""github.com/go-chi/chi/v5""github.com/go-chi/chi/v5/middleware")func routes(app *config.AppConfig) http.Handler { mux := chi.NewRouter() mux.Use(middleware.Recoverer) mux.Use(WriteToConsole) mux.Get("/", handlers.Repo.Home) mux.Get("/about", handlers.Repo.About) return mux}-- middleware.go --package mainimport ("fmt""net/http")func WriteToConsole(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Println("Hit the page") next.ServeHTTP(w, r) })}-- main.go --package mainimport ("hotelsystem/pkg/config""hotelsystem/pkg/handlers""hotelsystem/pkg/render""log""net/http")const portNumber = ":3000"func main() { var app config.AppConfig tc, err := render.CreateTemplateCache() if err != nil { log.Fatal("Can't create templatecache", err) } app.TemplateCache = tc app.UseCache = false repo := handlers.NewRepo(&app) handlers.NewHandlers(repo) render.NewTemplate(&app) // http.HandleFunc("/", handlers.Repo.Home) // http.HandleFunc("/about", handlers.Repo.About) // http.ListenAndServe(portNumber, nil) srv := &http.Server{ Addr: portNumber, Handler: routes(&app), } err = srv.ListenAndServe() if err != nil { log.Fatal(err) }}
I am having a hard time understanding the middleware.
I am using chi for routing.
What I didn't understand is what does that (next http.Handler
) argument in the WriteToConsole
refers to?
Does it refer to our mux router?
Also when I comment down the line next.ServeHTTP
of function writetoconsole the html is not rendered or anything? can someone explain me what does that next http.Handler
refers to and what next.serveHTTP
does?