当前位置: 首页 > news >正文

go-zero 统一返回

1、整体目录结构

2、全局处理主入口

package manageimport ("net/http""github.com/zeromicro/go-zero/rest/httpx"
)type Body struct {Code    int         `json:"code"`Message string      `json:"message"`Result  interface{} `json:"data"`
}// 统一返回入口,
func ResponseHandler(w http.ResponseWriter, resp interface{}, err error) {if err != nil {httpx.OkJson(w, ErrHandler(err))// 如果err不为空的话,走错误处理函数,将err传递过去} else {// 没有错误信息,返回相应内容httpx.OkJson(w, Body{Code:    OK.Code,Message: OK.Message,Result:  resp,})}
}

2、统一错误处理主入口

package managetype CodeError struct {Code    int    `json:"code"`Message string `json:"message"`
}// 实现error的接口  然后CodeError继承一下Error方法  CodeError就为error类型的返回值
func (e *CodeError) Error() string {return e.Message
}// 返回给前端的数据
func (e *CodeError) ErrorResponse() CodeError {return CodeError{Code:    e.Code,Message: e.Message,}
}// 用来自定义抛出的异常,支持调用传递
func NewCodeError(code int, msg string) error {return &CodeError{Code:    code,Message: msg,}
}// 提供new方法,任意地方传递参数返回CodeError类型的数据
func New(code int, msg string) CodeError {return CodeError{Code:    code,Message: msg,}
}// 默认异常状态码函数,只需传递错误信息即可,默认返回code-10001
func DefaultErrHandler(message string) error {return &CodeError{Code:    ServerError.Code,Message: message,}
}// 自定义错误返回函数 错误函数主入口
func ErrHandler(err error) interface{} {switch err.(type) {// 如果错误类型为CodeError,就返回错误类型的结构体case *CodeError:return errdefault:// 系统错误,500 错误提示return CodeError{Code: ServerError.Code, Message: err.Error()}}
}

3、全局异常状态

package managevar (OK          = New(0, "操作成功")ReidsError  = New(6379, "redis连接失败")JwtError    = New(500, "JWT解密失败")TokenError  = New(401, "Token已过期")ServerError = New(500, "服务器内部错误")
)

4、修改路由Handler函数

package basicsimport ("go/application/internal/logic/basics""go/application/internal/svc"basicsType "go/application/internal/types/basics"manage "go/pkg/manage""net/http""github.com/zeromicro/go-zero/rest/httpx"
)func LoginHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {var req basicsType.LoginReqif err := httpx.Parse(r, &req); err != nil {manage.ResponseHandler(w, nil, err)return}l := basics.NewLoginLogic(r.Context(), svcCtx)resp, err := l.Login(&req)manage.ResponseHandler(w, resp, err)}
}

httpx.OkJsonCtx和httpx.ErrorCtx() 替换为 manage.ResponseHandler

搞定收工

相关文章:

  • 使用Process.Start()打开文件夹时出现访问被拒绝异常
  • go grpc高级用法
  • 输出日志信息的两种方式比较:日志框架SLF4J和System.out.println
  • 【flutter项目类型】project type如何区分
  • Python基础(二十九、pymsql)
  • 如何快速搭建个人博客
  • c++线程thread示例
  • qt5-入门
  • UE4 CustomDepthMobile流程小记
  • 业务逐字稿
  • 在探最大模定理
  • TR-069/TR-369设备管理
  • vue3 el-pagination 将组件中英文‘goto’ 修改 为 中文到‘第几’
  • Google Chrome 中出现 ERR_SSL_KEY_USAGE_INCOMPATIBLE 错误
  • yolov5 deepsort 行人/车辆(检测 +计数+跟踪+测距+测速)
  • $translatePartialLoader加载失败及解决方式
  • CSS居中完全指南——构建CSS居中决策树
  • ES6 学习笔记(一)let,const和解构赋值
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • leetcode98. Validate Binary Search Tree
  • mysql innodb 索引使用指南
  • MySQL-事务管理(基础)
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • Redis 懒删除(lazy free)简史
  • Solarized Scheme
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • spring-boot List转Page
  • 关于extract.autodesk.io的一些说明
  • 类orAPI - 收藏集 - 掘金
  • 山寨一个 Promise
  • 用Python写一份独特的元宵节祝福
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 选择阿里云数据库HBase版十大理由
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (007)XHTML文档之标题——h1~h6
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (十三)Flink SQL
  • (四)stm32之通信协议
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)scrum常见工具列表
  • .net core 管理用户机密
  • .NET MVC第五章、模型绑定获取表单数据
  • .net Stream篇(六)
  • .NET 事件模型教程(二)
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .net和php怎么连接,php和apache之间如何连接