go - 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")
})
}
解决方案
您正在创建一个名为router
in的变量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()
并添加路由等。
推荐阅读
- r - R中的多元回归模型问题
- arrays - Ionic 5:运行时错误:未定义不是对象
- azure-devops - 如果试用过期,如何将许可证密钥添加到 Azure DevOps
- hibernate - org.hibernate.tool.schema.spi.CommandAcceptanceException:执行 DDL 时出错
- reactjs - 如何创建可跨多个 React 项目使用的私有共享组件库
- xml - xsl 变量导致一个空文档
- javascript - Angular中的cdkOverlay MatDialog不起作用
- lua - 使用 make 和 luarocks 在 lua 中安装 CJSON 失败
- codeigniter - sess_destroy() 的注销会话不起作用
- sql - Postgresql 中的 hash(#) 运算符有什么作用