簡體   English   中英

Go:如何使用 gqlgen graphql 實現禁用 CORS?

[英]Go: How to disable CORS using gqlgen graphql implementation?

我使用gqlgen作為 GraphQL 服務器。 我使用Apollo 客戶端從前端應用程序連接到此服務器。

如果我編譯前端代碼並將其作為靜態內容由 GraphQL 服務器提供,則一切正常。

問題:

在開發過程中,我的基於 Go 的 GraphQL API 在http://localhost:8080上運行,我在http://localhost:3000上運行的單獨服務器上有前端代碼。 這樣我就會收到 CORS 錯誤。

我設法通過在創建客戶端時指定no-cors選項來解決前端方面的問題,但后端仍然為我的請求提供 400s。

題:

如何在基於 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))
...

此外,我認為最好在開發以外的環境中進行相應的調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM