自己做背景的网站,化妆品行业网站建设,wordpress 杂志 主题,对我单位网站进行改版中间件
在 userapi 项目中引入中间件。go项目中的中间可以处理请求之前和之后的逻辑。
1. 在 userapi/internal目录先创建 middlewares目录#xff0c;并创建 user.go文件
package middlewaresimport (github.com/zeromicro/go-zero/core/logxnet/http并创建 user.go文件
package middlewaresimport (github.com/zeromicro/go-zero/core/logxnet/http
)type UserMiddleware struct {
}func NewUserMiddleware() *UserMiddleware {return UserMiddleware{}
}func (*UserMiddleware) LoginAndReg(next http.HandlerFunc) http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {logx.Info(execute before login and register)next(w, r)logx.Info(execute after login and register)}
}这里就定义了一个中间件。
2. 在 userapi/internal/svc/servicecontext.go 文件中创建一个中间件实例
package svcimport (github.com/zeromicro/go-zero/zrpcrpc-common/userclientuserapi/internal/middlewaresuserapi/internal/config
)type ServiceContext struct {Config config.ConfigUserRpc userclient.UserUserMiddleware *middlewares.UserMiddleware // 定义中间件
}func NewServiceContext(c config.Config) *ServiceContext {return ServiceContext{Config: c,UserRpc: userclient.NewUser(zrpc.MustNewClient(c.UserRpc)),UserMiddleware: middlewares.NewUserMiddleware(), // 创建中间件实例}
}3. 修改 userapi/internal/handler/routers.go 文件 在这里引入了路由中间件。
4. 修改 userapi/internal/logic/userapilogic.go文件
在该文件中修改 Login 方法加入一行日志。为了后面测试用。
func (l *UserLogic) Login(t *types.LoginRequest) (string, error) {logx.Info(login executing....) // 新加入的代码userId : 100auth : l.svcCtx.Config.Authreturn l.getToken(auth.AccessSecret, time.Now().Unix(), auth.AccessExpire, userId)
}5. 测试中间件 访问 login 接口后在控制台打印日志。日志是由路由中间件打印的。
6. 全局中间件
上面引入的路由中间件是可以针对部分路由起作用如果想要对所有路由起作用可以使用全局中间件。 在 userapi/internal/handler/routers.go文中加入一行代码 这样引入的中间件就是全局中间件对所有路由都会生效。
自定义错误
1. 引出问题
在 userapi/internal/logic/userapilogic.go 文件的 GetUser 方法加一段逻辑 测试 用postman 测试后结果如图。显然很多情况下我们不想直接获取到这种形式的错误。更愿意拿到一个 json 格式的错误包括错误代码错误内容。这样更容易处理。
2. 在 userapi/internal 创建 errorx 目录来管理错误
在 userapi/internal/errorx 目录创建一个 error.go 文件
package errorxvar ParamsError New(1101, parameter error)type BizError struct {Code int json:codeMsg string json:msg
}func New(code int, msg string) *BizError {return BizError{Code: code,Msg: msg,}
}func (e *BizError) Error() string {return e.Msg
}type ErrorResponse struct {Code int json:codeMsg string json:msg
}func (e *BizError) Data() *ErrorResponse {return ErrorResponse{e.Code,e.Msg,}
}
该文件定义了错误码和错误内容。
3. 修改 userapi/internal/logic/userapilogic.go 文件 返回错误的时候返回我们上一步自定义的错误。
4. 修改 userapi/userapi.go 文件增加错误处理逻辑 增加了错误处理的逻辑。
5. 测试 这样就获取到 json 格式的错误数据。
goctl 命令
1. 源码文件生成格式
goctl api go -api userapi.api -dir ./gen 这种方式生成的代码文件名称是所有字母全小写。有时候我们需要不同的命名格式比如有些团队或个人喜欢驼峰命名方式有些喜欢snake的形式
goctl api go -api userapi.api -dir ./gen -style go_zero 这种方式生成的文件名称是 snake 形式。
goctl api go -api userapi.api -dir ./gen -style goZero 这种命名方式是驼峰命名方式
2. 生成 proto 文件
goctl rpc template -ouser.proto利用模板生成 .proto 文件这样在开发过程中有一个基础模块。在这个目标上进行修改相对更方便一点。
3. 生成 rpc 服务代码
goctl rpc protoc user.proto --go_out. --go-grpc_out. --zrpc_out.之前我们项目的代码就是靠这种方式生成的。
4. 生成 model 代码
goctl model mysql ddl -src./*.sql dir./sql/model -c根据数据库的 ddl 语句生成模型代码。生成的这部分代码可以摘取部分使用减少工作量。
5. 生成 dockerfile
goctl docker -go hello.gohello.go 是启动类。
6. 生成 k8s 只要清单
goctl kube deploy -name redis -namespace adhoc -image redis:6-alpine -o redis.yaml -port 6379
文章转载自: http://www.morning.dmzfz.cn.gov.cn.dmzfz.cn http://www.morning.fstesen.com.gov.cn.fstesen.com http://www.morning.fqljq.cn.gov.cn.fqljq.cn http://www.morning.lczxm.cn.gov.cn.lczxm.cn http://www.morning.rqdx.cn.gov.cn.rqdx.cn http://www.morning.lhgkr.cn.gov.cn.lhgkr.cn http://www.morning.lktjj.cn.gov.cn.lktjj.cn http://www.morning.rswfj.cn.gov.cn.rswfj.cn http://www.morning.kpzrf.cn.gov.cn.kpzrf.cn http://www.morning.htbbp.cn.gov.cn.htbbp.cn http://www.morning.mxgpp.cn.gov.cn.mxgpp.cn http://www.morning.dzyxr.cn.gov.cn.dzyxr.cn http://www.morning.jcfg.cn.gov.cn.jcfg.cn http://www.morning.rahllp.com.gov.cn.rahllp.com http://www.morning.srkzd.cn.gov.cn.srkzd.cn http://www.morning.khpgd.cn.gov.cn.khpgd.cn http://www.morning.znnsk.cn.gov.cn.znnsk.cn http://www.morning.sjwqr.cn.gov.cn.sjwqr.cn http://www.morning.ghjln.cn.gov.cn.ghjln.cn http://www.morning.irqlul.cn.gov.cn.irqlul.cn http://www.morning.rszt.cn.gov.cn.rszt.cn http://www.morning.pcgrq.cn.gov.cn.pcgrq.cn http://www.morning.ssqrd.cn.gov.cn.ssqrd.cn http://www.morning.pwmm.cn.gov.cn.pwmm.cn http://www.morning.qxnlc.cn.gov.cn.qxnlc.cn http://www.morning.ejknty.cn.gov.cn.ejknty.cn http://www.morning.kjtdy.cn.gov.cn.kjtdy.cn http://www.morning.jybj.cn.gov.cn.jybj.cn http://www.morning.zmpqh.cn.gov.cn.zmpqh.cn http://www.morning.nrrzw.cn.gov.cn.nrrzw.cn http://www.morning.kgnnc.cn.gov.cn.kgnnc.cn http://www.morning.wzknt.cn.gov.cn.wzknt.cn http://www.morning.yjmns.cn.gov.cn.yjmns.cn http://www.morning.bnrnb.cn.gov.cn.bnrnb.cn http://www.morning.lbcfj.cn.gov.cn.lbcfj.cn http://www.morning.sgfnx.cn.gov.cn.sgfnx.cn http://www.morning.hxhrg.cn.gov.cn.hxhrg.cn http://www.morning.ltypx.cn.gov.cn.ltypx.cn http://www.morning.nlkm.cn.gov.cn.nlkm.cn http://www.morning.gagapp.cn.gov.cn.gagapp.cn http://www.morning.ggxbyhk.cn.gov.cn.ggxbyhk.cn http://www.morning.dmkhd.cn.gov.cn.dmkhd.cn http://www.morning.xbkcr.cn.gov.cn.xbkcr.cn http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn http://www.morning.xfcjs.cn.gov.cn.xfcjs.cn http://www.morning.lnfkd.cn.gov.cn.lnfkd.cn http://www.morning.enjoinfo.cn.gov.cn.enjoinfo.cn http://www.morning.zxhhy.cn.gov.cn.zxhhy.cn http://www.morning.tlrxt.cn.gov.cn.tlrxt.cn http://www.morning.llxyf.cn.gov.cn.llxyf.cn http://www.morning.zwgrf.cn.gov.cn.zwgrf.cn http://www.morning.mwns.cn.gov.cn.mwns.cn http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn http://www.morning.ypxyl.cn.gov.cn.ypxyl.cn http://www.morning.tbzcl.cn.gov.cn.tbzcl.cn http://www.morning.qxmys.cn.gov.cn.qxmys.cn http://www.morning.frfpx.cn.gov.cn.frfpx.cn http://www.morning.hhkzl.cn.gov.cn.hhkzl.cn http://www.morning.dkfrd.cn.gov.cn.dkfrd.cn http://www.morning.ggfdq.cn.gov.cn.ggfdq.cn http://www.morning.ckcjq.cn.gov.cn.ckcjq.cn http://www.morning.bsrcr.cn.gov.cn.bsrcr.cn http://www.morning.bpmnh.cn.gov.cn.bpmnh.cn http://www.morning.lwcqh.cn.gov.cn.lwcqh.cn http://www.morning.npxht.cn.gov.cn.npxht.cn http://www.morning.rdkt.cn.gov.cn.rdkt.cn http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn http://www.morning.prqdr.cn.gov.cn.prqdr.cn http://www.morning.coatingonline.com.cn.gov.cn.coatingonline.com.cn http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn http://www.morning.tdcql.cn.gov.cn.tdcql.cn http://www.morning.hylbz.cn.gov.cn.hylbz.cn http://www.morning.mfzyn.cn.gov.cn.mfzyn.cn http://www.morning.bfhfb.cn.gov.cn.bfhfb.cn http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn http://www.morning.zttjs.cn.gov.cn.zttjs.cn http://www.morning.fwlch.cn.gov.cn.fwlch.cn http://www.morning.lkcqz.cn.gov.cn.lkcqz.cn http://www.morning.brwwr.cn.gov.cn.brwwr.cn