中间件使用

    在go-zero中,中间件可以分为路由中间件和全局中间件,路由中间件是指某一些特定路由需要实现中间件逻辑,其和jwt类似,没有放在下的路由不会使用中间件功能, 而全局中间件的服务范围则是整个服务。

    中间件使用

    • 重新编写search.api文件,添加middleware声明

      1. type SearchReq struct {}
      2. type SearchReply struct {}
      3. @server(
      4. jwt: Auth
      5. middleware: Example // 路由中间件声明
      6. )
      7. service search-api {
      8. @handler search
      9. get /search/do (SearchReq) returns (SearchReply)
      10. }
      1. $ vim service/search/cmd/api/internal/svc/servicecontext.go
      1. type ServiceContext struct {
      2. Config config.Config
      3. Example rest.Middleware
      4. }
      5. func NewServiceContext(c config.Config) *ServiceContext {
      6. return &ServiceContext{
      7. Config: c,
      8. Example: middleware.NewExampleMiddleware().Handle,
      9. }
      10. }
    • 编写中间件逻辑 这里仅添加一行日志,内容example middle,如果服务运行输出example middle则代表中间件使用起来了。

      1. package middleware
      2. type ExampleMiddleware struct {
      3. }
      4. func NewExampleMiddleware() *ExampleMiddleware {
      5. return &ExampleMiddleware{}
      6. }
      7. func (m *ExampleMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc {
      8. return func(w http.ResponseWriter, r *http.Request) {
      9. // TODO generate middleware implement function, delete after code implementation
      10. // Passthrough to next handler if need
      11. next(w, r)
      12. }
      13. }
    • 启动服务验证

      全局中间件

      1. {"@timestamp":"2021-02-09T11:50:15.388+08","level":"info","content":"global middleware"}