1
0
mirror of https://github.com/labstack/echo.git synced 2025-07-03 00:56:59 +02:00

simplify middleware chain creation (#1299)

This commit is contained in:
Hemachandar
2019-03-05 21:54:59 +05:30
committed by Vishal Rana
parent 775b2eefec
commit 08db4bd39b

19
echo.go
View File

@ -575,21 +575,15 @@ func (e *Echo) ServeHTTP(w http.ResponseWriter, r *http.Request) {
if e.premiddleware == nil {
e.router.Find(r.Method, getPath(r), c)
h = c.Handler()
for i := len(e.middleware) - 1; i >= 0; i-- {
h = e.middleware[i](h)
}
h = applyMiddleware(h, e.middleware...)
} else {
h = func(c Context) error {
e.router.Find(r.Method, getPath(r), c)
h := c.Handler()
for i := len(e.middleware) - 1; i >= 0; i-- {
h = e.middleware[i](h)
}
h = applyMiddleware(h, e.middleware...)
return h(c)
}
for i := len(e.premiddleware) - 1; i >= 0; i-- {
h = e.premiddleware[i](h)
}
h = applyMiddleware(h, e.premiddleware...)
}
// Execute chain
@ -804,3 +798,10 @@ func newListener(address string) (*tcpKeepAliveListener, error) {
}
return &tcpKeepAliveListener{l.(*net.TCPListener)}, nil
}
func applyMiddleware(h HandlerFunc, middleware ...MiddlewareFunc) HandlerFunc {
for i := len(middleware) - 1; i >= 0; i-- {
h = middleware[i](h)
}
return h
}