当我们使用gin框架时,可以在中间件中进行跨域设置。
1 // 中间件 2 func middleware() gin.HandlerFunc { 3 return func(c *gin.Context) { 4 t := time.Now() 5 c.Set("example", "123456") 6 // c.Next()后就执行真实的路由函数,路由执行完成之后接着走time.Since(t) 7 c.Next() 8 9 // 从time.Now()到目前为止过了多长时间 10 latency := time.Since(t) 11 log.Print("--", latency) 12 13 // gin设置响应头,设置跨域 14 c.Header("Access-Control-Allow-Origin", "*") 15 c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") 16 c.Header("Access-Control-Allow-Headers", "Action, Module, X-PINGOTHER, Content-Type, Content-Disposition") 17 18 //设置中间件的响应头,路由的响应头可以在路由返回中设置,参考/ping 19 // c.Writer.WriteHeader(http.StatusMovedPermanently) 20 status := c.Writer.Status() 21 log.Println("==", status) 22 } 23 } 24 25 func middle(c *gin.Context) { 26 example := c.MustGet("example").(string) 27 log.Println(example) 28 } 29 30 func main() { 31 r := gin.Default() 32 33 //中间件,只有在中间件之后注册的路由才会走中间件 34 r.Use(middleware()) 35 //http://localhost:8081/middle 36 r.GET("/middle", middle) 37 38 r.Run(":8081") 39 }
每次执行路由函数middle()之前都会执行middleware()函数,在执行到middleware函数中c.Next()时,会执行真正的路由函数middle(),路由函数执行完成之后会继续执行middleware()中c.Next()函数后面的代码。