A simple http middleware chain implement.
package main
import (
"github.com/gookit/chain"
"net/http"
"testing"
)
func main() {
middleware0 := func(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("a"))
h.ServeHTTP(w, r)
w.Write([]byte("A"))
})
}
middleware1 := func(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("b"))
h.ServeHTTP(w, r)
w.Write([]byte("B"))
})
}
c := chain.New(middleware0, middleware1)
c.Use(func(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("c"))
h.ServeHTTP(w, r)
w.Write([]byte("C"))
})
})
h := c.Wrap(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("-(CORE)-"))
w.WriteHeader(200)
}))
http.ListenAndServe(":8090", h)
// Output: abc-(CORE)-CBA
}
MIT