登录
首页 >  Golang >  Go问答

实现禁用 CORS 的方法: 使用 gqlgen graphql 控制跨域资源共享

来源:stackoverflow

时间:2024-03-26 09:42:35 309浏览 收藏

使用 gqlgen GraphQL 服务器时,开发者可能会遇到跨域资源共享 (CORS) 问题。当前端应用程序连接到在不同端口上运行的 GraphQL API 时,通常会出现此问题。本文旨在提供禁用 CORS 的方法,以解决开发过程中出现的 400 秒错误。

问题内容

我使用 gqlgen 作为 graphql 服务器。我使用 apollo 客户端从前端应用程序连接到该服务器。

如果我编译前端代码并由 graphql 服务器将其作为静态内容提供,一切都会正常工作。

问题:

在开发过程中,我在 http://localhost:8080 上运行基于 go 的 graphql api,并且在 http://localhost:3000 上运行的单独服务器上运行前端代码。这样我就会收到 cors 错误。

我通过在创建客户端时指定 no-cors 选项成功解决了前端的问题,但后端仍然为我的请求提供了 400 秒的时间。

问题:

如何在基于 gqlgen 的 graphql api 中禁用 cors?

代码:

config := gql.Config{Resolvers: &gql.Resolver{}}
handler := handler.GraphQL(gql.NewExecutableSchema(config))
http.Handle("/query", handler)
http.ListenAndServe(":8080", nil)

完整的服务器端代码可在 github 上获取。

我尝试过的

我按照文档中的解决方案进行操作,但不起作用。我在 stackoverflow 上检查了几个解决方案,例如这个,但是它们提供了一个库特定的解决方案,但不适合我的情况。


解决方案


我认为如果你设置这个简单的中间件就足够了

func cors(h http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Access-Control-Allow-Origin", "*")
        w.Header().Set("Access-Control-Allow-Methods", "*")
        w.Header().Set("Access-Control-Allow-Headers", "*")
        h(w, r)
    }
}

...
http.Handle("/query", cors(handler))
...

此外,我认为在开发以外的环境中相应地调整这一点会很好。

以上就是《实现禁用 CORS 的方法: 使用 gqlgen graphql 控制跨域资源共享》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>