response.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package errors
  2. import "github.com/gogf/gf/net/ghttp"
  3. // ResponseError 响应错误
  4. type ResponseError struct {
  5. Code int // 错误码
  6. Message string // 错误消息
  7. StatusCode int // 响应错误码
  8. ERR error // 响应错误
  9. }
  10. func (r *ResponseError) Error() string {
  11. if r.ERR != nil {
  12. return r.ERR.Error()
  13. }
  14. return r.Message
  15. }
  16. // UnWrapResponse 解包响应错误
  17. func UnWrapResponse(err error) *ResponseError {
  18. if v, ok := err.(*ResponseError); ok {
  19. return v
  20. }
  21. return nil
  22. }
  23. // WrapResponse 包装响应错误
  24. func WrapResponse(err error, code int, msg string, status ...int) error {
  25. res := &ResponseError{
  26. Code: code,
  27. Message: msg,
  28. ERR: err,
  29. }
  30. if len(status) > 0 {
  31. res.StatusCode = status[0]
  32. }
  33. return res
  34. }
  35. // Wrap400Response 包装错误码为400的响应错误
  36. func Wrap400Response(err error, msg ...string) error {
  37. m := "请求发生错误"
  38. if len(msg) > 0 {
  39. m = msg[0]
  40. }
  41. return WrapResponse(err, 400, m, 400)
  42. }
  43. // Wrap500Response 包装错误码为500的响应错误
  44. func Wrap500Response(err error, msg ...string) error {
  45. m := "服务器发生错误"
  46. if len(msg) > 0 {
  47. m = msg[0]
  48. }
  49. return WrapResponse(err, 500, m, 500)
  50. }
  51. // NewResponse 创建响应错误
  52. func NewResponse(code int, msg string, status ...int) error {
  53. res := &ResponseError{
  54. Code: code,
  55. Message: msg,
  56. }
  57. if len(status) > 0 {
  58. res.StatusCode = status[0]
  59. }
  60. return res
  61. }
  62. // New400Response 创建错误码为400的响应错误
  63. func New400Response(msg string) error {
  64. return NewResponse(400, msg, 400)
  65. }
  66. // New500Response 创建错误码为500的响应错误
  67. func New500Response(msg string) error {
  68. return NewResponse(500, msg, 500)
  69. }
  70. func Json(r *ghttp.Request, code int, v interface{}) {
  71. if code == 500 || code == 401 {
  72. r.Response.WriteStatus(code)
  73. r.Response.ClearBuffer()
  74. }
  75. _ = r.Response.WriteJson(v)
  76. }
  77. // 返回JSON数据并退出当前HTTP执行函数。
  78. func JsonExit(r *ghttp.Request, err int, data interface{}) {
  79. Json(r, err, data)
  80. r.Exit()
  81. }