github.com/golazy/golazy@v0.0.7-0.20221012133820-968fe65a0b65/lazyview/serve/page.go (about) 1 package serve 2 3 import ( 4 "fmt" 5 "log" 6 "net/http" 7 "net/http/httptest" 8 "net/http/httputil" 9 "os" 10 11 "github.com/golazy/golazy/lazyview/nodes" 12 "github.com/gorilla/handlers" 13 ) 14 15 func Page(e nodes.Element) http.HandlerFunc { 16 return func(w http.ResponseWriter, r *http.Request) { 17 e.WriteTo(w) 18 } 19 } 20 21 func ServePage(e nodes.Element) { 22 port := os.Getenv("PORT") 23 if port == "" { 24 port = "2000" 25 } 26 27 http.Handle("/", Page(e)) 28 29 log.Println("Listening on http://localhost:" + port) 30 31 err := http.ListenAndServe(":"+port, handlers.CombinedLoggingHandler(os.Stdout, http.DefaultServeMux)) 32 //err := http.ListenAndServe(":"+port, http.DefaultServeMux) 33 //err := http.ListenAndServe(":"+port, logHandler(http.DefaultServeMux.ServeHTTP)) 34 if err != nil { 35 panic(err) 36 } 37 38 } 39 40 func logHandler(fn http.HandlerFunc) http.HandlerFunc { 41 return func(w http.ResponseWriter, r *http.Request) { 42 x, err := httputil.DumpRequest(r, true) 43 if err != nil { 44 http.Error(w, fmt.Sprint(err), http.StatusInternalServerError) 45 return 46 } 47 log.Println(fmt.Sprintf("%q", x)) 48 rec := httptest.NewRecorder() 49 fn(rec, r) 50 log.Println(fmt.Sprintf("%q", rec.Body)) 51 52 // this copies the recorded response to the response writer 53 for k, v := range rec.HeaderMap { 54 w.Header()[k] = v 55 } 56 w.WriteHeader(rec.Code) 57 rec.Body.WriteTo(w) 58 } 59 }