res.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package middleware
  2. import (
  3. "fmt"
  4. "github.com/gogf/gf/v2/errors/gcode"
  5. "github.com/gogf/gf/v2/errors/gerror"
  6. "github.com/gogf/gf/v2/net/ghttp"
  7. "net/http"
  8. "reflect"
  9. )
  10. type DefaultHandlerResponse struct {
  11. Code int `json:"code" dc:"响应状态码"`
  12. Message string `json:"msg" dc:"响应信息"`
  13. Data interface{} `json:"data" dc:"响应数据"`
  14. }
  15. func Res(r *ghttp.Request) {
  16. r.Middleware.Next()
  17. // There's custom buffer content, it then exits current handler.
  18. if r.Response.BufferLength() > 0 {
  19. return
  20. }
  21. var (
  22. msg string
  23. err = r.GetError()
  24. res = r.GetHandlerResponse()
  25. code = gerror.Code(err)
  26. )
  27. if err != nil {
  28. if code == gcode.CodeNil {
  29. code = gcode.CodeInternalError
  30. }
  31. msg = err.Error()
  32. } else if r.Response.Status > 0 && r.Response.Status != http.StatusOK {
  33. msg = http.StatusText(r.Response.Status)
  34. switch r.Response.Status {
  35. case http.StatusNotFound:
  36. code = gcode.CodeNotFound
  37. case http.StatusForbidden:
  38. code = gcode.CodeNotAuthorized
  39. default:
  40. code = gcode.CodeUnknown
  41. }
  42. } else {
  43. code = gcode.CodeOK
  44. }
  45. fmt.Println("res_type: ", reflect.TypeOf(res))
  46. fmt.Println("res_data: ", res)
  47. r.Response.WriteJsonExit(DefaultHandlerResponse{
  48. Code: code.Code(),
  49. Message: msg,
  50. Data: res,
  51. })
  52. }