123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package middleware
- import (
- "github.com/gin-gonic/gin"
- "log"
- "net/http"
- "runtime/debug"
- "ulink-admin/frame"
- )
- func Recover(c *frame.Context) {
- defer func() {
- if r := recover(); r != nil {
-
- log.Printf("panic: %v\n", r)
- debug.PrintStack()
- errorToString(c, r)
-
- c.Abort()
- }
- }()
-
- c.Next()
- }
- func errorToString(c *frame.Context, r interface{}) {
- switch v := r.(type) {
- case error:
- c.JSON(http.StatusOK, gin.H{
- "status": 500,
- "msg": v.Error(),
- "data": nil,
- })
- case frame.Exception:
- c.JSON(http.StatusOK, gin.H{
- "status": v.Status,
- "msg": v.Msg,
- "data": nil,
- })
- default:
- c.JSON(http.StatusOK, gin.H{
- "status": 500,
- "msg": v.(string),
- "data": nil,
- })
- }
- }
|