Files

70 lines
1.6 KiB
Go

package middleware
import (
"net/http"
"server/utility/ecode"
"server/utility/i18n"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/os/glog"
"github.com/gogf/gf/v2/util/gconv"
)
func Response(r *ghttp.Request) {
r.Middleware.Next()
if r.Response.BufferLength() > 0 {
return
}
var (
msg string
err = r.GetError()
res = r.GetHandlerResponse()
code = gerror.Code(err)
ctx = r.GetCtx()
)
glog.Debug(gctx.New(), "错误", err)
if err != nil {
if gconv.String(code.Detail()) != "customer" && code.Code() != 51 {
msg = ecode.Fail.MessageI18n(ctx)
} else if code.Code() == 51 {
msg = ecode.Params.MessageI18n(ctx)
} else {
// 尝试从国际化系统获取消息
msg = i18n.T(ctx, code.Message())
if msg == code.Message() {
// 如果没有找到国际化消息,使用原始消息
msg = code.Message()
}
}
} else if r.Response.Status > 0 && r.Response.Status != http.StatusOK {
// HTTP状态码错误消息的国际化
switch r.Response.Status {
case http.StatusNotFound:
code = gcode.CodeNotFound
msg = i18n.T(ctx, "not_found")
case http.StatusForbidden:
code = gcode.CodeNotAuthorized
msg = i18n.T(ctx, "forbidden")
case http.StatusUnauthorized:
code = gcode.CodeNotAuthorized
msg = i18n.T(ctx, "unauthorized")
default:
code = gcode.CodeUnknown
msg = i18n.T(ctx, "unknown_error")
}
} else {
code = gcode.CodeOK
msg = i18n.T(ctx, "success")
}
r.Response.WriteJson(ghttp.DefaultHandlerResponse{
Code: code.Code(),
Message: msg,
Data: res,
})
}