中间件的使用
一、中间件是什么?
gin中间件可以在处理具体的route请求时,提前做一些业务。比如用户有效性的校验,特定日志格式的打印,错误日志的打印等等。
二、自定义中间件
1.全局中间件
func MiddleWare() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("Middleware run")
}
}
func main() {
engine := gin.Default()
engine.Use(MiddleWare())
engine.GET("/login", func(c *gin.Context) {
cp := c.Copy()
log.Println("tomngbu")
go func() {
log.Println("yibuzhixing-------" + cp.Request.URL.Path)
}()
})
engine.GET("duty", func(c *gin.Context) {
//
log.Println("")
})
engine.Run()
}
运行截图
2.局部中间件
只用于一个路由。
func MiddleWare() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("Middleware run")
}
}
func main() {
engine := gin.Default()
//engine.Use(MiddleWare())
engine.GET("/login", MiddleWare(), func(c *gin.Context) {
cp := c.Copy()
log.Println("tomngbu")
go func() {
log.Println("yibuzhixing-------" + cp.Request.URL.Path)
}()
})
engine.GET("duty", func(c *gin.Context) {
//
log.Println("")
})
engine.Run()
}
先链接一次“/duty"时,可以看见没有使用中间件
3.Next()方法
一般情况下,中间件是用于路由访问之前的,但有时我们需要等到路由访问完成才能知道一些数据,这个时候就需要用到Next方法。
func MiddleWare() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("Middleware run")
c.Next()
fmt.Println(c.Writer.Status())
}
}
func main() {
engine := gin.Default()
//engine.Use(MiddleWare())
engine.GET("/login", MiddleWare(), func(c *gin.Context) {
log.Println("tomngbu")
})
engine.Run()
}
运行结果:可以看出,中间件中间还有路由运行