package middleware import ( "fmt" "github.com/gofiber/fiber/v2" ) type ProblemDetails struct { Type string Title string Status int Detail string } func ErrorHandler() fiber.Handler { return func(c *fiber.Ctx) error { defer func() { if r := recover(); r != nil { status := fiber.StatusInternalServerError c.Status(status).JSON(ProblemDetails{ Type: fmt.Sprintf("https://httpstatuses.io/%d", status), Title: "Internal Server Error", Status: status, Detail: fmt.Sprint(r), }) } }() err := c.Next() if err != nil { status := c.Response().StatusCode() c.JSON(ProblemDetails{ Type: fmt.Sprintf("https://httpstatuses.io/%d", status), Title: err.Error(), Status: status, Detail: "No further details available", }) } return nil } }