gin error handler

This commit is contained in:
2026-01-23 21:33:36 -07:00
parent b9464adada
commit 3fd533091c
5 changed files with 47 additions and 25 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ func Handler(f HandlerFunc) gin.HandlerFunc {
return func(c *gin.Context) {
res, err := f(c)
if err != nil {
WriteError(c, err)
c.Error(err)
} else {
Write(c, res)
}
+38 -20
View File
@@ -8,6 +8,44 @@ import (
"github.com/gin-gonic/gin"
)
func HandleErrors(c *gin.Context) {
c.Next()
if len(c.Errors) == 0 || c.Writer.Written() {
return
}
var (
err ErrorResponse
ok bool
)
for _, e := range c.Errors {
if err, ok = GetError(e); ok {
break
}
}
if !ok {
return
}
status, ok := err.GetStatus()
if !ok {
status = http.StatusInternalServerError
}
if h, ok := err.GetHTML(); ok {
c.Status(status)
c.Header("Content-Type", "text/html")
c.Writer.Write(h)
return
}
msg, ok := err.GetMsg()
if !ok {
msg = err.Error()
}
c.String(status, msg)
}
func Write(c *gin.Context, res Response) {
w := c.Writer
@@ -51,17 +89,6 @@ func Write(c *gin.Context, res Response) {
}
func WriteError(c *gin.Context, err error) {
status := GetStatusFromError(err)
if h, ok := GetHTMLFromError(err); ok {
c.Status(status)
c.Header("Content-Type", "text/html")
c.Writer.Write(h)
} else {
c.String(status, err.Error())
}
}
func GetStatusFromError(err error) int {
status := http.StatusInternalServerError
@@ -73,12 +100,3 @@ func GetStatusFromError(err error) int {
return status
}
func GetHTMLFromError(err error) ([]byte, bool) {
e, ok := GetError(err)
if !ok {
return nil, false
}
return e.GetHTML()
}