首页 > 解决方案 > CORS 请求未应用正确的 Golang

问题描述

将包 rs/cors 用于 Gin Gonic 框架,但无法弄清楚为什么 corsConfig 不适用于我的 localhost 前端。我已经为 golang 尝试了各种 cors 包,但它们似乎都不适合我。我希望能够在不使用 Google chrome 扩展程序的情况下在本地测试我的后端和前端服务。任何帮助都感激不尽。

func main() {
    router := gin.Default()

    corsConfig := cors.New(cors.Options{
        AllowedOrigins: []string{"*"},
        AllowedMethods:     []string{"PUT", "PATCH", "GET", "POST", "DELETE", "OPTIONS"},
        AllowedHeaders: []string{"*"},
        AllowCredentials: false,
        MaxAge: int(12 * time.Hour),
    })
    
    router.Use(corsConfig)

    connDB, err := postgres.InitDB()     
    if err != nil {
        log.Fatal(err)
        return
    }

    defer connDB.Close()
    // Our server will live in the routes package
    routes.Run()
}
import (
    "github.com/gin-gonic/gin"
)

var (
    router = gin.Default()
)

// Run will start the server
func Run() {

    getRoutes()
    router.Run(":8000")
}

// getRoutes will create our routes of our entire application
// this way every group of routes can be defined in their own file
// so this one won't be so messy
func getRoutes() {
    v1 := router.Group("/v1")
    addUserRoutes(v1)
    addPingRoutes(v1)

    v2 := router.Group("/v2")
    addPingRoutes(v2)

    router.GET("/testing", func(c *gin.Context) {
        c.JSON(200, "hello")
    })
}

在此处输入图像描述

标签: gobackend

解决方案


您正在创建一个名为routerin的变量main并使用以下命令对其进行配置corsConfig

router := gin.Default()
...
router.Use(corsConfig)

这些是唯一引用此变量的时间。

然后,您将创建一个单独的变量;router也在你的routes包中调用:

var (
    router = gin.Default()
)

这两个变量是完全独立的。corsConfig是针对一个(in )处理的,但它是您用来服务界面main的另一个(来自模块)。routes

有几种方法可以解决这个问题:

  • main()摆脱router := gin.Default()和使用routes.router.Use(corsConfig)(不是很推荐)。
  • corsConfig设置和添加getRoutes()
  • 将路由器传入Run()并添加路由等。

推荐阅读