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:
19
echo.go
19
echo.go
@ -575,21 +575,15 @@ func (e *Echo) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
if e.premiddleware == nil {
|
if e.premiddleware == nil {
|
||||||
e.router.Find(r.Method, getPath(r), c)
|
e.router.Find(r.Method, getPath(r), c)
|
||||||
h = c.Handler()
|
h = c.Handler()
|
||||||
for i := len(e.middleware) - 1; i >= 0; i-- {
|
h = applyMiddleware(h, e.middleware...)
|
||||||
h = e.middleware[i](h)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
h = func(c Context) error {
|
h = func(c Context) error {
|
||||||
e.router.Find(r.Method, getPath(r), c)
|
e.router.Find(r.Method, getPath(r), c)
|
||||||
h := c.Handler()
|
h := c.Handler()
|
||||||
for i := len(e.middleware) - 1; i >= 0; i-- {
|
h = applyMiddleware(h, e.middleware...)
|
||||||
h = e.middleware[i](h)
|
|
||||||
}
|
|
||||||
return h(c)
|
return h(c)
|
||||||
}
|
}
|
||||||
for i := len(e.premiddleware) - 1; i >= 0; i-- {
|
h = applyMiddleware(h, e.premiddleware...)
|
||||||
h = e.premiddleware[i](h)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Execute chain
|
// Execute chain
|
||||||
@ -804,3 +798,10 @@ func newListener(address string) (*tcpKeepAliveListener, error) {
|
|||||||
}
|
}
|
||||||
return &tcpKeepAliveListener{l.(*net.TCPListener)}, nil
|
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
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user