Go在Gin中解决CORS中间件没生效的问题
起因#
最近在写前后端分离项目,然后在前端访问后端提供的接口时,会出现CORS问题。
查找资料发现,Gin官方是有提供中间件的https://github.com/gin-contrib/cors
先在terminal输入 go get github.com/gin-contrib/cors
然后就按照官方的使用例子就行:
package main
import (
"time"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.Use(cors.Default())
router.Run()
}
然后我以为这个是可以作用于路由,于是就这么用了:
package main
import (
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)
func main() {
engine := gin.Default()
myGroup := engine.Group("/myGroup").Use(cors.Default())
{
myGroup.GET("/myRouter", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "myRouter",
})
})
}
}
结果我调试了,还以为是CORS中间件出问题了。
过程#
最后定位到是Gin中的Engine.Use()
与RouterGroup.Use()
的实现是不同的:
可以看到gin.Engine
的Use()
比gin.RouterGroup
的Use()
多两个调用
这两个调用其实影响的是Engine.allNoMethod
与Engine.allNoRoute
,也就是在所有[方法:路由]处理前都会调用的中间件。
解决方法#
于是只需要在最开始分配Engine的时候Use(cors.Default())
就好啦
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人