all repos — homestead @ 63e8b92d6e764cac748e1a97d88698e93b8ffafa

Code for my website

use builtin error interface for http handlers

Alan Pearce
commit

63e8b92d6e764cac748e1a97d88698e93b8ffafa

parent

f58148583a563fca788c4dc9c357a3d2d6e0f49c

1 file changed, 9 insertions(+), 5 deletions(-)

changed files
M shared/http/mux.goshared/http/mux.go
@@ -7,15 +7,15 @@ "alin.ovh/x/log"
) // HandleFunc is a function that handles an HTTP request and may return an Error. -type HandleFunc func(http.ResponseWriter, *http.Request) Error +type HandleFunc func(http.ResponseWriter, *http.Request) error // Handler is an interface for types that can serve HTTP requests and may return an Error. type Handler interface { - ServeHTTP(http.ResponseWriter, *http.Request) Error + ServeHTTP(http.ResponseWriter, *http.Request) error } // ErrorHandler is a function that handles HTTP errors. -type ErrorHandler func(Error, http.ResponseWriter, *http.Request) +type ErrorHandler func(error, http.ResponseWriter, *http.Request) // ServeMux is an HTTP request multiplexer with error handling support. // It matches the URL of each incoming request against a list of registered
@@ -31,8 +31,12 @@ func NewServeMux(logger *log.Logger) *ServeMux {
return &ServeMux{ ServeMux: http.NewServeMux(), log: logger, - errorHandler: func(err Error, w http.ResponseWriter, _ *http.Request) { - http.Error(w, err.Error(), err.StatusCode()) + errorHandler: func(err error, w http.ResponseWriter, _ *http.Request) { + if hErr, ok := err.(Error); ok { + http.Error(w, hErr.Error(), hErr.StatusCode()) + } else { + http.Error(w, "Internal Server Error", http.StatusInternalServerError) + } }, } }