Middleware

Middleware is supported by the HTTP transport.

Adding Middleware

import "github.com/mirkobrombin/go-module-router/v2/pkg/transport/http"

t := http.New()

t.Use(func(next stdhttp.Handler) stdhttp.Handler {
    return stdhttp.HandlerFunc(func(w stdhttp.ResponseWriter, r *stdhttp.Request) {
        start := time.Now()
        next.ServeHTTP(w, r)
        log.Printf("%s %s %v", r.Method, r.URL.Path, time.Since(start))
    })
})

Middleware Order

Middleware is applied in LIFO order (last registered wraps outermost).

t.Use(logging)   // outer
t.Use(auth)      // inner
// Request flow: logging -> auth -> handler -> auth -> logging

Group-Scoped Middleware

Middleware added to a group applies only to that group’s routes:

api := t.Group("/api")
api.Use(authMiddleware)  // Only applies to /api/* routes
api.Register(&GetUser{})