-
-
Save avary/89c537009eaa665a6b84f3a7cd512729 to your computer and use it in GitHub Desktop.
Golang http muxer with middleware support
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package mux | |
import ( | |
"fmt" | |
"net/http" | |
) | |
type Middleware struct { | |
mux *http.ServeMux | |
middlewares [](func(http.Handler) http.Handler) | |
} | |
func NewServeMux() Middleware { | |
return Middleware{ | |
mux: http.NewServeMux(), | |
} | |
} | |
func (m *Middleware) AddMiddleware(handler func(http.Handler) http.Handler) { | |
m.middlewares = append(m.middlewares, handler) | |
} | |
func (m Middleware) Route(pattern string, f func(m *Middleware, prefix string) http.Handler) { | |
newMux := NewServeMux() | |
for _, h := range m.middlewares { | |
newMux.AddMiddleware(h) | |
} | |
m.mux.Handle(pattern, f(&newMux, pattern)) | |
} | |
func (m Middleware) Handle(pattern string, handler func(http.ResponseWriter, *http.Request)) { | |
var newHandler http.Handler = http.HandlerFunc(handler) | |
for _, h := range m.middlewares { | |
newHandler = h(newHandler) | |
} | |
m.mux.Handle(pattern, newHandler) | |
} | |
func (m Middleware) ServeHTTP(w http.ResponseWriter, r *http.Request) { | |
m.mux.ServeHTTP(w, r) | |
} | |
func (m Middleware) Error(w http.ResponseWriter, error string, code int) { | |
w.Header().Set("X-Content-Type-Options", "nosniff") | |
w.WriteHeader(code) | |
fmt.Fprintln(w, error) | |
} | |
func (m Middleware) Write(w http.ResponseWriter, msg string, args ...interface{}) { | |
fmt.Fprintf(w, msg, args...) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment