resp.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package zerox
  2. import (
  3. "context"
  4. "git.gzquan.cn/pkg/go-common/xerr"
  5. "github.com/zeromicro/go-zero/core/logx"
  6. "github.com/zeromicro/go-zero/rest/httpx"
  7. "net/http"
  8. )
  9. // BaseResp 基础返回结构
  10. type BaseResp struct {
  11. Code int `json:"code"`
  12. Msg string `json:"message"`
  13. Data any `json:"data"`
  14. }
  15. // SetOkHandler 成功处理方法
  16. func SetOkHandler() {
  17. httpx.SetOkHandler(func(ctx context.Context, a any) any {
  18. resp := &BaseResp{
  19. Code: http.StatusOK,
  20. Msg: "success",
  21. Data: a,
  22. }
  23. return resp
  24. })
  25. }
  26. // SetErrorHandler 失败处理方法
  27. func SetErrorHandler() {
  28. httpx.SetErrorHandler(func(err error) (int, any) {
  29. logx.Errorf("error type is %T, value: %v", err, err)
  30. switch e := err.(type) {
  31. case *xerr.CodeMsg:
  32. return http.StatusOK, &BaseResp{
  33. Code: e.GetErrCode(),
  34. Msg: e.GetErrMsg(),
  35. Data: nil,
  36. }
  37. case *xerr.ServerMsg:
  38. return http.StatusInternalServerError, &BaseResp{
  39. Code: e.GetErrCode(),
  40. Msg: e.GetErrMsg(),
  41. Data: nil,
  42. }
  43. default:
  44. return http.StatusServiceUnavailable, &BaseResp{
  45. Code: xerr.BaseError,
  46. Msg: err.Error(),
  47. Data: nil,
  48. }
  49. }
  50. })
  51. }