gin框架使用路由组时不能跨域
1. 运行环境
go 环境
go1.20.4 windows/amd64
github.com/gin-gonic/gin v1.9.0
github.com/gin-contrib/cors
windows 环境
版本 Windows 11 专业版
版本 22H2
操作系统版本 22621.1635
2. 问题描述?
当使用路由组时,跨域中间件无效
前端使用fetch api 请求后端数据
app:= gin.Default()
app.Use(cors.Default())
v1:=app.Group("/staff")
{
v1.GET("/", func(c *gin.Context) {
c.JSON(200,gin.H{"name":"zzh"})
})
}
app:= gin.Default()
v1:=app.Group("/staff").Use(cors.Default())
{
v1.GET("/", func(c *gin.Context) {
c.JSON(200,gin.H{"name":"zzh"})
})
}
app:= gin.Default()
v1:=app.Group("/staff",cors.Default())
{
v1.GET("/", func(c *gin.Context) {
c.JSON(200,gin.H{"name":"zzh"})
})
}
以上三种写法都不能跨域has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled
app:= gin.Default()
app.Use(cors.Default())
app.GET("/staff", func(c *gin.Context) {
c.JSON(200,gin.H{"name":"zzh"})
})
不使用路由组时可以跨域
3. 您期望得到的结果?
使用路由组可以正常跨域
//: <> (能截图就截图。)
写个跨域中间件
package middleware
import (
"github.com/gin-gonic/gin"
"net/http"
"strings"
)
// Cors 跨域中间件
func Cors() gin.HandlerFunc {
return func(ctx *gin.Context) {
}
然后Use一下就可以了
官方提供的跨域方案试下:github.com/gin-contrib/cors
你那个报错是用的你给的例子也会报错吗?通常报错是逻辑有问题报错也会出现跨域问题。最好单独的先测试下
这个我曾今好像遇到过,我重新封装了一下框架,之后可能会开放出来,你别用
gin.Default()
。整体来说gin的路由非常快,但是存在一定的顺序和污染问题,需要规定规范路由使用方式。