|
- package e
-
- import (
- "net/http"
-
- "github.com/gin-gonic/gin"
-
- "applet/app/utils/logx"
- )
-
- // GetMsg get error information based on Code
- // 因为这里code是自己控制的, 因此没考虑报错信息
- func GetMsg(code int) (int, string) {
- if msg, ok := MsgFlags[code]; ok {
- return code / 1000, msg
- }
- if http.StatusText(code) == "" {
- code = 200
- }
- return code, MsgFlags[ERR_BAD_REQUEST]
- }
-
- // 成功输出, fields 是额外字段, 与code, msg同级
- func OutSuc(c *gin.Context, data interface{}, fields map[string]interface{}) {
- res := gin.H{
- "code": 1,
- "msg": "ok",
- "data": data,
- }
- if fields != nil {
- for k, v := range fields {
- res[k] = v
- }
- }
-
- c.AbortWithStatusJSON(200, res)
- }
-
- func OutSucPure(c *gin.Context, data interface{}, fields map[string]interface{}) {
- res := gin.H{
- "code": 1,
- "msg": "ok",
- "data": data,
- }
- if fields != nil {
- for k, v := range fields {
- res[k] = v
- }
- }
- c.Abort()
- c.PureJSON(200, res)
- }
-
- // 错误输出
- func OutErr(c *gin.Context, code int, err ...interface{}) {
- statusCode, msg := GetMsg(code)
- if len(err) > 0 && err[0] != nil {
- e := err[0]
- switch v := e.(type) {
- case E:
- statusCode = v.Code / 1000
- msg = v.Error()
- logx.Error(v.msg + ": " + v.st) // 记录堆栈信息
- case error:
- logx.Error(v)
- break
- case string:
- msg = v
- case int:
- if _, ok := MsgFlags[v]; ok {
- msg = MsgFlags[v]
- }
- }
- }
-
- c.AbortWithStatusJSON(statusCode, gin.H{
- "code": code,
- "msg": msg,
- "data": []struct{}{},
- })
- }
-
- // 重定向
- func OutRedirect(c *gin.Context, code int, loc string) {
- if code < 301 || code > 308 {
- code = 303
- }
- c.Redirect(code, loc)
- c.Abort()
- }
|