httpResult.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package result
  2. import (
  3. "fmt"
  4. "net/http"
  5. "GtDataStore/common/xerr"
  6. "github.com/pkg/errors"
  7. "github.com/zeromicro/go-zero/core/logx"
  8. "github.com/zeromicro/go-zero/rest/httpx"
  9. "google.golang.org/grpc/status"
  10. )
  11. // http返回
  12. func HttpResult(r *http.Request, w http.ResponseWriter, resp interface{}, err error) {
  13. if err == nil {
  14. //成功返回
  15. r := Success(resp)
  16. httpx.WriteJson(w, http.StatusOK, r)
  17. } else {
  18. //错误返回
  19. errcode := xerr.SERVER_COMMON_ERROR
  20. errmsg := "服务器开小差啦,稍后再来试一试"
  21. causeErr := errors.Cause(err) // err类型
  22. //logx.Infof("【HttpResult】------------:%v", causeErr)
  23. if e, ok := causeErr.(*xerr.CodeError); ok { //自定义错误类型
  24. //自定义CodeError
  25. errcode = e.GetErrCode()
  26. errmsg = e.GetErrMsg()
  27. } else {
  28. if gstatus, ok := status.FromError(causeErr); ok { // grpc err错误
  29. grpcCode := uint32(gstatus.Code())
  30. if xerr.IsCodeErr(grpcCode) { //区分自定义错误跟系统底层、db等错误,底层、db错误不能返回给前端
  31. errcode = grpcCode
  32. errmsg = gstatus.Message()
  33. }
  34. }
  35. }
  36. //logx.WithContext(r.Context()).Errorf("【API-ERR】 : %+v ", err)
  37. httpx.WriteJson(w, http.StatusBadRequest, Error(errcode, errmsg))
  38. }
  39. }
  40. // 授权的http方法
  41. func AuthHttpResult(r *http.Request, w http.ResponseWriter, resp interface{}, err error) {
  42. if err == nil {
  43. //成功返回
  44. r := Success(resp)
  45. httpx.WriteJson(w, http.StatusOK, r)
  46. } else {
  47. //错误返回
  48. errcode := xerr.SERVER_COMMON_ERROR
  49. errmsg := "服务器开小差啦,稍后再来试一试"
  50. causeErr := errors.Cause(err) // err类型
  51. if e, ok := causeErr.(*xerr.CodeError); ok { //自定义错误类型
  52. //自定义CodeError
  53. errcode = e.GetErrCode()
  54. errmsg = e.GetErrMsg()
  55. } else {
  56. if gstatus, ok := status.FromError(causeErr); ok { // grpc err错误
  57. grpcCode := uint32(gstatus.Code())
  58. if xerr.IsCodeErr(grpcCode) { //区分自定义错误跟系统底层、db等错误,底层、db错误不能返回给前端
  59. errcode = grpcCode
  60. errmsg = gstatus.Message()
  61. }
  62. }
  63. }
  64. logx.WithContext(r.Context()).Errorf("【GATEWAY-ERR】 : %+v ", err)
  65. httpx.WriteJson(w, http.StatusUnauthorized, Error(errcode, errmsg))
  66. }
  67. }
  68. // http 参数错误返回
  69. func ParamErrorResult(r *http.Request, w http.ResponseWriter, err error) {
  70. errMsg := fmt.Sprintf("%s ,%s", xerr.MapErrMsg(xerr.REUQEST_PARAM_ERROR), err.Error())
  71. httpx.WriteJson(w, http.StatusBadRequest, Error(xerr.REUQEST_PARAM_ERROR, errMsg))
  72. }