Current implementation server middlewares to a handler goes like this:
var handler = func(w http.ResponseWriter, r *http.Request) {
siw.Handler.YourRouteHandler(w, r)
}
for _, middleware := range siw.HandlerMiddlewares {
handler = middleware(handler)
}
The snippet above tends to execute beginning middlewares at the later than the last ones.
The looping is supposed to be like this:
var handler = func(w http.ResponseWriter, r *http.Request) {
siw.Handler.YourRouteHandler(w, r)
}
for i := len(siw.HandlerMiddlewares) - 1; i >= 0; i-- {
h := siw.HandlerMiddlewares[i]
if h != nil {
handler = h(handler)
}
}
The solution is referenced from Ardan Lab's Service repository on wrapping middlewares