diff --git a/cmd/web/handlers.go b/cmd/web/handlers.go index ca36a67..28cfe9c 100644 --- a/cmd/web/handlers.go +++ b/cmd/web/handlers.go @@ -3,12 +3,11 @@ package main import ( "fmt" "html/template" - "log" "net/http" "strconv" ) -func home(w http.ResponseWriter, r *http.Request) { +func (app *application) home(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return @@ -20,18 +19,18 @@ func home(w http.ResponseWriter, r *http.Request) { } ts, err := template.ParseFiles(files...) if err != nil { - log.Print(err.Error()) + app.errorLog.Print(err.Error()) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } err = ts.ExecuteTemplate(w, "base", nil) if err != nil { - log.Print(err.Error()) + app.errorLog.Print(err.Error()) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } } -func snippetView(w http.ResponseWriter, r *http.Request) { +func (app *application) snippetView(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(r.URL.Query().Get("id")) if err != nil || id < 1 { http.NotFound(w, r) @@ -40,7 +39,7 @@ func snippetView(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Display a specific snippet with ID %d...", id) } -func snippetCreate(w http.ResponseWriter, r *http.Request) { +func (app *application) snippetCreate(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { w.Header().Set("Allow", http.MethodPost) http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) diff --git a/cmd/web/main.go b/cmd/web/main.go index 442e4af..36a54e4 100644 --- a/cmd/web/main.go +++ b/cmd/web/main.go @@ -7,6 +7,11 @@ import ( "os" ) +type application struct { + errorLog *log.Logger + infoLog *log.Logger +} + type config struct { addr string staticDir string @@ -18,15 +23,20 @@ func main() { flag.StringVar(&cfg.staticDir, "static-dir", "./ui/static", "Path to static assets") flag.Parse() - infoLog := log.New(os.Stdout, "INFO\t", log.Ldate|log.Ltime) errorLog := log.New(os.Stderr, "ERROR\t", log.Ldate|log.Ltime|log.Lshortfile) + infoLog := log.New(os.Stdout, "INFO\t", log.Ldate|log.Ltime) + + app := &application{ + errorLog: errorLog, + infoLog: infoLog, + } mux := http.NewServeMux() fileServer := http.FileServer(http.Dir("./ui/static/")) - mux.HandleFunc("/", home) - mux.HandleFunc("/snippet/view", snippetView) - mux.HandleFunc("/snippet/create", snippetCreate) + mux.HandleFunc("/", app.home) + mux.HandleFunc("/snippet/view", app.snippetView) + mux.HandleFunc("/snippet/create", app.snippetCreate) mux.Handle("/static/", http.StripPrefix("/static", fileServer)) srv := &http.Server{