Go: Как отключить CORS с помощью реализации gqlgen graphql? - PullRequest
0 голосов
/ 20 января 2020

Я использую gqlgen в качестве сервера GraphQL. Я подключаюсь к этому серверу из внешнего приложения, используя клиент Apollo .

Все работает правильно, если я скомпилировал код переднего плана и предоставил его сервером StaQL * stati c.

Проблема:

Во время разработки у меня есть GraphQL API на основе Go, работающий на http://localhost:8080, и у меня есть код интерфейса на отдельном сервере, работающем на http://localhost:3000. Таким образом, я получаю ошибки CORS.

Мне удалось исправить проблему на внешней стороне, указав опцию no-cors при создании клиента, но внутренняя часть все равно отдает 400 секунд моим запросам.

Вопрос:

Как отключить CORS в API GraphQL на основе gqlgen?

Код:

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

Полный код на стороне сервера доступен на GitHub .

Что я пробовал :

Я следовал решение от документация , которая не работала. Я проверил несколько решений в StackOverflow, например , это , однако они дают библиотеку, определяющую c решений, которые в моем случае не стоят.

1 Ответ

1 голос
/ 21 января 2020

Я думаю, что этого будет достаточно, если вы настроите это простое промежуточное ПО

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))
...

Кроме того, я думаю, что было бы неплохо настроить это соответствующим образом в средах, отличных от разработки.

...