这篇文章主要讲解了“如何使用中间件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用中间件”吧!
使用场景:
我们接着上一期的工程继续
查看一下目录
➜ go-gin-test tree -L 3 .├── go.mod├── go.sum├── hello├── mian.go└── routerex └── router.go
在routerex
目录下新建mid
目录 在mid
目录下新建mid.go
文件
首先我们定义一个中间件。它的作用是在请求到达服务后,但是还未进行业务处理时,需要验证请求是否合法
编辑mid.go
package midimport ( "github.com/gin-gonic/gin")func midAuth(c *gin.Context) { //获取请求的ip地址 ip := c.ClientIP() //如果请求地址来源不正确,那么阻止这个请求继续 if ip != "baidu.com" { println("ip 地址不正确") c.Abort() return } // 处理请求 c.Next()}
编辑router.go
package routereximport ( "example.com/m/v2/routerex/mid" "github.com/gin-gonic/gin")func InitRouter(g *gin.Engine) { g1 := g.Group("g1") //中间件 g1.Use(mid.MidAuth) g1.GET("/hello1", func(c *gin.Context) { c.JSON(200, gin.H{ "msg": "Hello g1", }) }) g2 := g.Group("g2") g2.GET("/hello2", func(c *gin.Context) { c.JSON(200, gin.H{ "msg": "Hello g2", }) })}
执行go build -o hello
来编译为可执行文件
➜ go-gin-test go build -o hello➜ go-gin-test lsgo.mod go.sum hello mian.go
执行./hello
让我们的服务跑起来
打开浏览器访问http://localhost:8080/g1/hello1
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.- using env: export GIN_MODE=release- using code: gin.SetMode(gin.ReleaseMode)[GIN-debug] GET /g1/hello1 --> example.com/m/v2/routerex.InitRouter.func1 (4 handlers)[GIN-debug] GET /g2/hello2 --> example.com/m/v2/routerex.InitRouter.func2 (3 handlers)[GIN-debug] Environment variable PORT is undefined. Using port :8080 by default[GIN-debug] Listening and serving HTTP on :8080ip 地址不正确[GIN] 2021/04/06 - 17:00:38 | 200 | 61.658µs | ::1 | GET "/g1/hello1"
可以看到我们的浏览器上没有任何输出
但是在后台日志上,我们看到了我们在代码中打印的ip 地址不正确
通过这个思路,我们可以实现很多业务或者场景的需求。
下面这个代码就是通用的跨域中间件
func midCors(c *gin.Context) { c.Header("Access-Control-Allow-Origin", c.Request.Header.Get("Origin")) c.Header("Access-Control-Allow-Headers", "*") c.Header("Access-Control-Allow-Methods", "*") c.Header("Access-Control-Allow-Credentials", "true") //放行所有OPTIONS方法 if c.Request.Method == "OPTIONS" { c.AbortWithStatus(http.StatusNoContent) } // 处理请求 c.Next()}
name := c.Param("name")
//这个写法具有默认值firstname := c.DefaultQuery("firstname", "Guest")
//无默认值message := c.PostForm("message")//有默认值nick := c.DefaultPostForm("nick", "anonymous")
ids := c.QueryMap("ids")names := c.PostFormMap("names")
form, _ := c.MultipartForm()files := form.File["upload[]"]
//结构体j := J{}c.BindJSON(j)
当然除了上述常用的方式之外,gin还提供的更加丰富的获取参数的方式。
感谢各位的阅读,以上就是“如何使用中间件”的内容了,经过本文的学习后,相信大家对如何使用中间件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/superhreojim/blog/5014354