Как установить COR с помощью Lacinia Pedestal? - PullRequest
3 голосов
/ 23 марта 2019

Я настраиваю сервер lacinia-pedestal graphql, используя Clojure, и пытаюсь получить к нему доступ с помощью клиентского кода javascript, используя apollo.Тем не менее, я не могу получить доступ к конечной точке / graphql на локальном хосте, потому что я пытаюсь получить к ней доступ из источника локального хоста (localhost: 3000), который не разрешен COR.Как настроить COR с помощью lacinia-pedestal?

Вот код на стороне сервера (настройка с использованием учебника lacinia https://lacinia.readthedocs.io/en/latest/tutorial/component.html)

(ns project.server
  (:require [com.stuartsierra.component :as component]
            [com.walmartlabs.lacinia.pedestal :as lp]
            [io.pedestal.http :as http]))

(defrecord Server [schema-provider server]

  component/Lifecycle

  (start [this]
    (assoc this :server (-> schema-provider
                            :schema
                            (lp/service-map {:graphiql true})
                            http/create-server
                            http/start)))

  (stop [this]
    (http/stop server)
    (assoc this :server nil)))

(defn new-server
  []
  {:server (-> {}
               map->Server
               (component/using [:schema-provider]))})

Код на стороне клиента очень прост (используя Apollo):

const client = new ApolloClient({
  uri: "http://localhost:8888/graphql"
});

1 Ответ

2 голосов
/ 24 марта 2019

Обновление: мне удалось решить эту проблему, объединив мою сервисную карту пьедестала Lacinia со стандартной сервисной картой пьедестала.

 (start [this]
    (assoc this :server (-> schema-provider
                            :schema
                            (lp/service-map {:graphiql true})
                            (merge {::http/allowed-origins (constantly true)})
                            http/create-server
                            http/start)))
...