gin error handler
This commit is contained in:
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user