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

襄阳专业做网站郑州百度推广开户

襄阳专业做网站,郑州百度推广开户,上市设计公司网站,网站的总体方案与功能设计gin框架内容(三)--中间件 Gin框架允许开发者在处理请求的过程中,加入用户自己的函数。这个函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等 即比如&#x…

gin框架内容(三)--中间件

Gin框架允许开发者在处理请求的过程中,加入用户自己的函数。这个函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等
即比如,如果访问一个网页的话,不管访问什么路径都需要进行登录,此时就需要为所有路径的处理函数进行统一一个中间件
Gin中的中间件必须是一个gin.HandlerFunc类型
 

一、中间件的设置

1.1为路由单独注册中间件

package mainimport ("fmt""github.com/gin-gonic/gin""net/http""time"
)func indexHandler(c *gin.Context) {fmt.Println("index.....")c.JSON(http.StatusOK, gin.H{"msg": "index",})
}// 定义一个中间件
func m1(c *gin.Context) {fmt.Println("m1 in.........")start := time.Now()c.Next() //调用后续的处理函数,即indexHandler//Since是一个函数,传入的参数是(t Time),返回值是 Duration//Duration是一个自定义类型,即: type Duration int64cost := time.Since(start) //从开始时间到现在花费的时间fmt.Println(cost)fmt.Println("m1 out.........")
}func main() {r := gin.Default()// m1处于indexHandler函数的前面,请求来之后,先走m1,再走indexr.GET("/index", m1, indexHandler)_ = r.Run()
}

 

1.2为全局路由注册1个中间件

定义的全局中间件,下面的每个路由调用都是经过这个全局中间件

 

 

1.3为全局路由注册2个中间件【多个中间件也是这样的思路】

package mainimport ("fmt""github.com/gin-gonic/gin""net/http""time"
)func indexHandler(c *gin.Context) {fmt.Println("index.....")c.JSON(http.StatusOK, gin.H{"msg": "index",})
}// 定义一个中间件m1
func m1(c *gin.Context) {fmt.Println("m1 in.........")start := time.Now()c.Next()cost := time.Since(start)fmt.Println(cost)fmt.Println("m1 out.........")
}// 定义一个中间件m2
func m2(c *gin.Context) {fmt.Println("m2 in.........")c.Next()fmt.Println("m2 out.........")
}
func main() {r := gin.Default()//确定中间件中间的关系r.Use(m1, m2)r.GET("/index", indexHandler)r.GET("/shop", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"msg": "shop",})})r.GET("/user", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"msg": "user",})})_ = r.Run()
}

 

 从上面的打印关系可以看出,先通过第一个中间件M1的“

c.Next()的前半部分,然后在到M2,最后到index,然后在执行c.Next()的后半部分,

这就是一个中间件的链条

1.4中间件的后面路由停止执行

1.4.1终止执行1

package mainimport ("fmt""github.com/gin-gonic/gin""net/http""time"
)func indexHandler(c *gin.Context) {fmt.Println("index.....")c.JSON(http.StatusOK, gin.H{"msg": "index",})
}// 定义一个中间件
func m1(c *gin.Context) {fmt.Println("m1 in.........")start := time.Now()c.Next()cost := time.Since(start)fmt.Println(cost)fmt.Println("m1 out.........")
}// 定义一个中间件
func m2(c *gin.Context) {fmt.Println("m2 in.........")c.Abort() //阻止调用后续的处理函数fmt.Println("m2 out.........")
}
func main() {r := gin.Default()r.Use(m1, m2)r.GET("/index", indexHandler)r.GET("/shop", func(c *gin.Context) {fmt.Println("1111")c.JSON(http.StatusOK, gin.H{"msg": "shop",})})r.GET("/user", func(c *gin.Context) {fmt.Println("222222222")c.JSON(http.StatusOK, gin.H{"msg": "user",})})_ = r.Run()
}

因为m2中有个“

c.Abort() //阻止调用后续的处理函数

”阻止后续内容执行,到这里就是返回了,根本执行不到后续路由信息

 

 

 

1.4.2终止执行2 return

 

 

 

1.5数据传递

在中间件里做一些操作,然后在处理函数里拿到或者其它的中间件里拿到对应的数据

package mainimport ("fmt""github.com/gin-gonic/gin""net/http""time"
)func indexHandler(c *gin.Context) {fmt.Println("index.....")//Get是*Context的方法 传入的参数是(key string) ,返回值是(value interface{}, exists bool)name, ok := c.Get("name")if !ok {name = "匿名用户"}c.JSON(http.StatusOK, gin.H{"msg": name,})
}// 定义一个中间件
func m1(c *gin.Context) {fmt.Println("m1 in.........")start := time.Now()c.Next()cost := time.Since(start)fmt.Println(cost)name, ok := c.Get("name")if !ok {name = "匿名用户"}fmt.Println(name)fmt.Println("m1 out.........")
}// 定义一个中间件
func m2(c *gin.Context) {fmt.Println("m2 in.........")c.Set("name", "tom")fmt.Println("m2 out.........")
}
func main() {r := gin.Default()r.Use(m1, m2)r.GET("/index", indexHandler)_ = r.Run()
}

 

http://www.tj-hxxt.cn/news/97383.html

相关文章:

  • 太原专业网站制作线上推广怎么做
  • 做网站平台成本seo排名优化方式方法
  • 免费企业网站源码大全关键词搜索方法
  • 网软志成学校网站管理系统官方商业正式版知名的搜索引擎优化
  • 网站建设费记什么科目2023年10月疫情恢复
  • 卡地亚手表官方网站seo优化方法
  • 山东建站管理系统知名品牌营销策划案例
  • 东莞清溪妇产科医院广州推广seo
  • 小草网络 网站建设百度竞价排名规则及费用
  • 东莞网络营销策划培训东莞seo计费
  • 做电路方案设计的网站杭州网站推广找哪家
  • 做海报找背景图有哪些网站网络营销的重要性
  • 做鞋子的网站北京做网站的公司排行
  • 网站系统找不到指定的文件百度竞价推广一个月多少钱
  • 重庆环保公司网站建设最近国际时事热点事件
  • 网站的按钮怎么做的百度指数平台官网
  • h5的制作步骤岳阳seo快速排名
  • 做网站小图标大全信息流优化师简历
  • 国内十大网站建设公司所有的竞价托管公司
  • 注册免费微网站网站建站流程
  • 大气好看的网站app推广策划方案
  • 电商网站建设考试题好用的种子搜索引擎
  • 优质做网站费用郑州网站推广效果
  • 甜蜜定制app下载厦门seo顾问
  • 分类信息网址seo综合查询网站
  • 在国际网站做外贸需要条件seo是什么意思?
  • 临沂网站公众号建设东莞seoseo关键词排名优化
  • 兰州网站建设慕枫推广普通话的意义简短
  • 做的网站打印全乱掉了plc培训机构哪家最好
  • 网站建设与优化百度推广客户端app