goframe的分组路由中间件和全局路由中间件的使用区别

阅读: 评论:0

goframe的分组路由中间件和全局路由中间件的使用区别

goframe的分组路由中间件和全局路由中间件的使用区别

goframe 版本2.4.1
根据官网自建goframe项目,下面根据demo新模块说明

分组路由中间件

g.Server().Group一般用来做分组路由,通过规则来分流每个请求,然后在Group里面用到group.Middleware调用中间件

全局路由中间件

后期新增的模块有改动,可能也会需要用到g.Server().Group这个功能,但是为了解耦,不想入侵原来的核心文件,可以在新增的模块的中间件使用g.Server().BindMiddleware

目录结构

<

引入新增的模块

package mainimport ("github/gogf/gf/os/gctx"// 引入新增的模块_ "gfdemo/demo"_ "gfdemo/internal/logic"_ "gfdemo/internal/packed""gfdemo/internal/cmd"
)func main() {cmd.Main.Run(gctx.New())}

demo/

package controllerimport ("context""gfdemo/demo/middleware""github/gogf/gf/v2/frame/g""github/gogf/gf/v2/net/ghttp"
)func init() {controller := &Controller{}s := g.Server()s.Group("/", func(group *ghttp.RouterGroup) {group.Middleware(middleware.MiddlewareHandlerResponse)group.Bind(controller,)})
}type Controller struct{}
type WelcomeReq struct {g.Meta `path:"/app/demo/open/welcome" method:"GET"`
}
type WelcomeRes struct {Data interface{} `json:"data"`Show interface{} `json:"show"`
}func (c *Controller) Welcome(ctx context.Context, req *WelcomeReq) (res *WelcomeRes, err error) {fmt.Println("执行了 /app/demo/open/welcome")return
}type MiddReq struct {g.Meta `path:"/app/demo/comm/Show" method:"GET"`
}
type MiddRes struct {Data interface{} `json:"data"`Show interface{} `json:"show"`
}func (c *Controller) Show(ctx context.Context, req *MiddReq) (res *MiddRes, err error) {// 如果被全局中间件拦截了,不会打印fmt.Println("执行了 /app/demo/open/welcome")return
}

demo/

package middlewareimport ("github/gogf/gf/v2/frame/g""github/gogf/gf/v2/net/ghttp"
)// group路由拦截请求
func MiddlewareHandlerResponse(r *ghttp.Request) {r.Middleware.Next()type DefaultHandlerResponse struct {Code    int         `json:"code"    dc:"Error code"`Message string      `json:"message" dc:"Error message"`Data    interface{} `json:"data,omitempty"    dc:"Result data for certain request according API definition"`}//分组路由中间件返回信息r.Response.WriteJson(DefaultHandlerResponse{Code:    1000,Message: "分组路由中间件",})
}func init() {// 全局路由拦截符合规则的请求g.Server().BindMiddleware("/app/*/comm/* ", MiddlewareOpen)
}// 全局路由拦截请求返回
func MiddlewareOpen(r *ghttp.Request) {statusCode := 200r.Response.WriteStatusExit(statusCode, g.Map{"code":    1000,"message": "全局路由拦截了",})r.Middleware.Next()}

终端输入

go mod tidy
gf 

浏览器打开localhost:8100/app/demo/open/welcome
这个是分组路由的请求

浏览器打开localhost:8100/app/demo/comm/show
这个是全局路由的请求

本文发布于:2024-01-29 16:22:58,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170651658016559.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:路由   中间件   全局   区别   goframe
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23