首页 > 其他分享 >Go在Gin中解决CORS中间件没生效的问题

Go在Gin中解决CORS中间件没生效的问题

时间:2024-01-22 19:45:17浏览次数:35  
标签:Use github CORS 中间件 cors Go gin com

起因

最近在写前后端分离项目,然后在前端访问后端提供的接口时,会出现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()的实现是不同的:

image-20240122192947499

image-20240122192934662

可以看到gin.EngineUse()gin.RouterGroupUse()多两个调用

image-20240122193232916

这两个调用其实影响的是Engine.allNoMethodEngine.allNoRoute,也就是在所有[方法:路由]处理前都会调用的中间件。

解决方法

于是只需要在最开始分配Engine的时候Use(cors.Default())就好啦

标签:Use,github,CORS,中间件,cors,Go,gin,com
From: https://www.cnblogs.com/Vikyanite/p/17980824

相关文章

  • 详解img should be PIL Image. Got <class ‘numpy.ndarray‘>
    详解imgshouldbePILImage.Got当使用Python中的PIL(PythonImagingLibrary)库进行图像处理时,有时会遇到如下错误提示:imgshouldbePILImage.Got<class'numpy.ndarray'>。本文将解释该错误的原因和解决方法。问题描述在使用PIL库对图像进行处理时,如果将一个numpy.ndarray类......
  • 收到请求数据的常用安全验证方案,go语言,gin框架
    收到请求数据的常用安全验证方案,go语言,gin框架原创 小锟哥哥 GoLang全栈 2024-01-1807:47 发表于四川 1人听过在使用Gin框架处理前端请求数据时,必须关注安全性问题,以防范常见的攻击。本文将探讨Gin框架中常见的安全问题,并提供相应的处理方法,以确保应用程序的稳......
  • 基于项目的协同过滤推荐算法(Item-Based Collaborative Filtering Recommendation Alg
    前言协同过滤推荐系统,包括基于用户的、基于项目的息肉通过率等,今天我们读一篇基于项目的协同过滤算法的论文。今天读的论文为一篇名叫《基于项目的协同过滤推荐算法》(Item-BasedCollaborativeFilteringRecommendationAlgorithms)。摘要Recommendersystemsapplyknowledg......
  • mongodb账号管理
    环境:OS:Centos7DB:4.4.13 1.创建账号并授权(在admin下创建账号)/usr/local/services/mongodb/bin/mongolocalhost:28001useadmindb.auth("root","root123");db.createUser({user:'data_syn',pwd:'sdr123',roles:[{role:'read'......
  • Django(藏狗) Web框架
    一、概论特点:内部已集成了很多组件+第三方组件二、安装1、安装pipinstallDjango2、安装后目录c:\python\ -python.exe -Scripts -pip.exe -django-admin.exe【工具,创建django项目中的文件和文件夹】 -Lib -内置模块 -site-packages -openpyxl -pyt......
  • Go异常处理
    GO中引入的处理方式为:defer,panic,recover。GO中可以抛出一个panic的异常,然后再defer中通过recover捕获这个异常,然后正常处理。functest(){ //使用defer+recover捕获异常test函数出栈后defer修饰的函数会执行 deferfunc(){ err:=recover()//recover()内置函数,可以......
  • go-net-http 4
    不要通过共享内存来通信,而应该通过通信来共享内存这个是golang社区的经典语说的是什么意思呢?之前使用C代码进行性能优化的时候,遇到了很多高性能的架构,但是其只依赖于高性能的MPSC队列(queue普遍使用的原子锁,offset,count都使用CAS操作),而从来不在事务逻辑里用锁那应该怎样理解?答......
  • Java开发者的Golang进修指南:从0->1带你实现协程池
    在Java编程中,为了降低开销和优化程序的效率,我们常常使用线程池来管理线程的创建和销毁,并尽量复用已创建的对象。这样做不仅可以提高程序的运行效率,还能减少垃圾回收器对对象的回收次数。在Golang中,我们知道协程(goroutine)由于其体积小且效率高,在高并发场景中扮演着重要的角色。然......
  • 使用Go发送HTTP POST请求
    在Go语言中,我们可以使用net/http包来发送HTTPPOST请求。以下是一个简单的示例,展示了如何使用Go发送HTTPPOST请求并获取响应。go复制代码package mainimport ("bytes" "fmt" "io/ioutil" "net/http" )func main() {//创建一个HTTP客户端client:=&http.Client{}//......
  • 在Go中处理HTTPS请求:一场加密的舞蹈
    嘿,Go语言的爱好者们,你们准备好跳一场加密的舞蹈了吗?今天,我们要一起探讨如何在Go中处理那些神秘的HTTPS请求。首先,我们要明白HTTPS是什么。简单来说,HTTPS就是给HTTP穿上了一层"加密的外套",让数据在传输过程中变得难以被窥视。这就像是在网络世界里,我们给自己的信息加了一把锁,只有拥......