1010 RouterWrapper interface {
1111 Handler () http.Handler
1212 Mux () * http.ServeMux
13+ GetMiddlewares () * []func (http.Handler ) http.Handler
1314 HandleFunc (
1415 path string ,
1516 handler http.HandlerFunc ,
3031
3132 // Router is the route group struct
3233 Router struct {
34+ middlewares []func (http.Handler ) http.Handler
3335 firstHandler http.Handler
3436 mux * http.ServeMux
3537 path string
@@ -54,10 +56,11 @@ func NewRouter(
5456 mux := http .NewServeMux ()
5557
5658 // Chain the handlers
57- firstChainedHandler := ChainHandlers (mux , middlewares ... )
59+ firstHandler := ChainHandlers (mux , middlewares ... )
5860
5961 return & Router {
60- firstHandler : firstChainedHandler ,
62+ middlewares : middlewares ,
63+ firstHandler : firstHandler ,
6164 mux : mux ,
6265 logger : logger ,
6366 path : path ,
@@ -95,11 +98,12 @@ func NewGroup(
9598 mux := http .NewServeMux ()
9699
97100 // Chain the handlers
98- firstChainedHandler := ChainHandlers (mux , middlewares ... )
101+ firstHandler := ChainHandlers (mux , middlewares ... )
99102
100103 // Create a new router
101104 instance := & Router {
102- firstHandler : firstChainedHandler ,
105+ middlewares : middlewares ,
106+ firstHandler : firstHandler ,
103107 mux : mux ,
104108 logger : baseRouter .logger ,
105109 path : routerPath ,
@@ -122,17 +126,22 @@ func (r *Router) Mux() *http.ServeMux {
122126 return r .mux
123127}
124128
129+ // GetMiddlewares returns the middlewares
130+ func (r * Router ) GetMiddlewares () * []func (http.Handler ) http.Handler {
131+ return & r .middlewares
132+ }
133+
125134// HandleFunc registers a new route with a path, the handler function and the middlewares
126135func (r * Router ) HandleFunc (
127136 path string ,
128137 handler http.HandlerFunc ,
129138 middlewares ... func (http.Handler ) http.Handler ,
130139) {
131140 // Chain the handlers
132- firstChainedHandler := ChainHandlers (handler , middlewares ... )
141+ firstHandler := ChainHandlers (handler , middlewares ... )
133142
134143 // Register the route
135- r .mux .HandleFunc (path , firstChainedHandler .ServeHTTP )
144+ r .mux .HandleFunc (path , firstHandler .ServeHTTP )
136145
137146 if r .logger != nil && r .mode != nil && ! r .mode .IsProd () {
138147 r .logger .RegisterRoute (r .path , path )
@@ -173,6 +182,10 @@ func (r *Router) NewGroup(
173182 path string ,
174183 middlewares ... func (next http.Handler ) http.Handler ,
175184) * Router {
185+ // Append the base router middlewares
186+ middlewares = append (middlewares , r .middlewares ... )
187+
188+ // Create a new group
176189 newGroup , _ := NewGroup (r , path , middlewares ... )
177190 return newGroup
178191}
0 commit comments