44 lines
821 B
Go
44 lines
821 B
Go
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
|
|
}
|
|
}
|