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

网站ar怎么做生活信息网站如何推广

网站ar怎么做,生活信息网站如何推广,做类似交易猫的网站,医院网站云服务器配置go-zero 错误处理#xff08;统一响应信息#xff09; 在实现注册逻辑时#xff0c;尝试重复注册可能会返回 400 状态码#xff0c;显然不符合正常设计思维。我们希望状态码为 200#xff0c;并在响应中返回错误信息。 一、使用第三方库 1.下载库 目前 go-zero官方的…go-zero 错误处理统一响应信息 在实现注册逻辑时尝试重复注册可能会返回 400 状态码显然不符合正常设计思维。我们希望状态码为 200并在响应中返回错误信息。 一、使用第三方库 1.下载库 目前 go-zero官方的 zeromicro 下有一个 x 仓库可以实现统一响应格式我们先安装下 go get github.com/zeromicro/x它会自动帮我们把响应信息改为下面这种格式 {code: 0,msg: ok,data: {...} }2.修改handler 接着我们修改internal/handler/register/registerhandler.go文件把原来的响应处理替换成这个库的 //导入zeromicro库并设置别名,避免和原生的http冲突 import (xhttp github.com/zeromicro/x/http )//修改RegisterHandler的返回信息 func RegisterHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {var req types.RegisterRequestif err : httpx.Parse(r, req); err ! nil {//使用xhttp.JsonBaseResponseCtx 替换掉httpx.ErrorCtxxhttp.JsonBaseResponseCtx(r.Context(), w, err)//httpx.ErrorCtx(r.Context(), w, err)return}l : register.NewRegisterLogic(r.Context(), svcCtx)resp, err : l.Register(req)if err ! nil {//使用xhttp.JsonBaseResponseCtx 替换掉httpx.ErrorCtxxhttp.JsonBaseResponseCtx(r.Context(), w, err)//httpx.ErrorCtx(r.Context(), w, err)} else {//使用xhttp.JsonBaseResponseCtx 替换掉httpx.OkJsonCtxxhttp.JsonBaseResponseCtx(r.Context(), w, resp)//httpx.OkJsonCtx(r.Context(), w, resp)}} } 3.修改返回错误 在internal/logic/user/registerlogic.go 文件中把原来的err 修改成 errors.New() ,它的参数有两个一个是用来返回 code码 还有一个是message消息 func (l *RegisterLogic) Register(req *types.RegisterRequest) (resp *types.RegisterResponse, err error) {// todo: add your logic here and delete this line/*.....*/if user ! nil {//return nil, errreturn nil, errors.New(1, 用户已注册)}//插入新的数据/*.....*/if err ! nil {//return nil, errreturn nil, errors.New(2, 用户注册失败)}} 接着我们运行项目使用Postman重新测试结果如下 二、自定义错误管理 如果你不想使用这个库或者想自己实现一些自定义错误那么你也可以自己设置错误管理 1.自定义错误结构与格式化 我们在internal目录下新建biz目录用于业务处理然后再这个目录下分别创建3个文件 创建biz.go 文件 package biztype Error struct {Code int json:codeMsg string json:msg }func NewError(code int, msg string) *Error {return Error{Code: code,Msg: msg,} }func (e *Error) Error() string {return e.Msg } 创建resp.go 文件 package biztype Result struct {Code int json:codeMsg string json:msgData any json:data }func Success(data any) *Result {return Result{Code: Ok,Msg: success,Data: data,} }func Fail(err *Error) *Result {return Result{Code: err.Code,Msg: err.Msg,} } 创建vars.go 文件 package bizconst Ok 200var (AlreadyRegister NewError(1, 用户已注册)PasswordErr NewError(2, 密码错误)InsertErr NewError(3, 用户注册失败) ) 2. 使用 httpx.Error 和 httpx.SetErrorHandler 接着修改user.go 文件 /*....*/defer server.Stop()//httpx.SetErrorHandler 函数可以帮助你定义一个全局的错误处理逻辑//该逻辑会在 HTTP handler 中捕获到的所有错误中执行。//它将允许你统一处理各类错误返回更加一致和用户友好的响应。//httpx.SetErrorHandler 仅在调用了 httpx.Error 处理响应时才有效。httpx.SetErrorHandler(func(err error) (int, any) {switch e : err.(type) {case *biz.Error:// 自定义一个 错误返回类型return http.StatusOK, biz.Fail(e)default:return http.StatusInternalServerError, nil}})ctx : svc.NewServiceContext(c)/*....*/ 修改internal/handler/register/registerhandler.go文件: func RegisterHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {var req types.RegisterRequestif err : httpx.Parse(r, req); err ! nil {//httpx.SetErrorHandler 仅在调用了 httpx.Error 处理响应时才有效。//所以我们现在还是使用原来的httpx.ErrorCtxhttpx.ErrorCtx(r.Context(), w, err)return}l : register.NewRegisterLogic(r.Context(), svcCtx)resp, err : l.Register(req)if err ! nil {//httpx.SetErrorHandler 仅在调用了 httpx.Error 处理响应时才有效。//所以我们现在还是使用原来的httpx.ErrorCtxhttpx.ErrorCtx(r.Context(), w, err)} else {//成功的请求httpx.SetErrorHandler 是捕获不到的// 所以需要我们自定义返回信息httpx.OkJsonCtx(r.Context(), w, biz.Success(resp))}} }3.实现统一的错误响应机制 接下来修改 internal/user/register/registerlogic.go文件 func (l *RegisterLogic) Register(req *types.RegisterRequest) (resp *types.RegisterResponse, err error) {// todo: add your logic here and delete this line/*...*/if user ! nil {//return nil, errors.New(1, 用户已注册)return nil, biz.AlreadyRegister}//插入新的数据/*...*/if err ! nil {//return nil, errors.New(2, 用户注册失败)return nil, biz.InsertErr}}接着运行测试
http://www.w-s-a.com/news/399083/

相关文章:

  • 南昌网站建设模板合作凡客app哪去了
  • 有免费做网站的吗建设互联网站
  • 北京市保障房建设投资中心网站淄博哪个网站做房屋出赁好
  • 如何做网站的优化网站开发怎么收费
  • 网站的关键词怎么选择2345实用查询
  • 免费的制作网站做图剪片文案网站app接单
  • 中国有多少网站有多少域名上海网站建设网页制作邢台
  • 网站 数据报表如何做室内设计联盟官方网站入口
  • 怎样建设网站论文合肥做网站的软件公司
  • 收款后自动发货的网站是怎么做的怎么看网站后台网页尺寸
  • 谷歌seo引擎优化宁波seo关键词
  • 外贸网站建设需要注意什么seo课程
  • 做信息图网站网站建设的软件介绍
  • 网站开发语言数据库有几种魏县审批建设的网站
  • 北京公司网站建设推荐海口建设
  • 不懂编程如何做网站婚礼网站模板
  • 像京东一样的网站wordpress入门视频教程7 - 如何在文章里加入视频和音乐
  • 惠州网站建设排名wordpress3万篇文章优化
  • 创建网站的三种方法北京建王园林工程有限公司
  • jsp网站建设模板下载十大免费excel网站
  • 网络公司网站图片网站建立好了自己怎么做优化
  • 云主机是不是可以搭建无数个网站百度快速seo优化
  • 房地产怎么做网站推广建立音乐网站
  • 川畅科技联系 网站设计网站开发的教学视频
  • 为什么学网站开发凡科登陆
  • 设计师常备设计网站大全中山精品网站建设信息
  • 杭州建设工程网seo服务是什么
  • 兼职做问卷调查的网站wordpress mysql设置
  • 怎么在百度上能搜到自己的网站山西seo谷歌关键词优化工具
  • 网站搭建免费模板飞鱼crm下载