當我們使用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()函數后面的代碼。