Middleware personalizado
El middleware de Gin es una función que devuelve un gin.HandlerFunc. El middleware se ejecuta antes y/o después del handler principal, lo que lo hace útil para logging, autenticación, manejo de errores y otras preocupaciones transversales.
Flujo de ejecución del middleware
Una función middleware tiene dos fases, divididas por la llamada a c.Next():
- Antes de
c.Next()— El código aquí se ejecuta antes de que la solicitud llegue al handler principal. Usa esta fase para tareas de configuración como registrar el tiempo de inicio, validar tokens o establecer valores de contexto conc.Set(). c.Next()— Esto llama al siguiente handler en la cadena (que puede ser otro middleware o el handler de ruta final). La ejecución se pausa aquí hasta que todos los handlers posteriores se hayan completado.- Después de
c.Next()— El código aquí se ejecuta después de que el handler principal ha terminado. Usa esta fase para limpieza, registrar el estado de la respuesta o medir latencia.
Si quieres detener la cadena completamente (por ejemplo, cuando la autenticación falla), llama a c.Abort() en lugar de c.Next(). Esto previene que cualquier handler restante se ejecute. Puedes combinarlo con una respuesta, por ejemplo c.AbortWithStatusJSON(401, gin.H{"error": "unauthorized"}).
package main
import ( "log" "time"
"github.com/gin-gonic/gin")
func Logger() gin.HandlerFunc { return func(c *gin.Context) { t := time.Now()
// Set example variable c.Set("example", "12345")
// before request
c.Next()
// after request latency := time.Since(t) log.Print(latency)
// access the status we are sending status := c.Writer.Status() log.Println(status) }}
func main() { r := gin.New() r.Use(Logger())
r.GET("/test", func(c *gin.Context) { example := c.MustGet("example").(string)
// it would print: "12345" log.Println(example) })
// Listen and serve on 0.0.0.0:8080 r.Run(":8080")}Pruébalo
curl http://localhost:8080/testLos logs del servidor mostrarán la latencia de la solicitud y el código de estado HTTP para cada solicitud que pase a través del middleware Logger.