#server #clojure #cors #graphql #pedestal
#сервер #clojure #cors #graphql #пьедестал
Вопрос:
Я настраиваю сервер graphql на базе lacinia-piedestra с использованием Clojure и пытаюсь получить к нему доступ с помощью клиентского кода javascript с использованием apollo. Однако я не могу получить доступ к конечной точке / graphql на localhost, потому что я пытаюсь получить к ней доступ с источника localhost (localhost: 3000), который не разрешен CORs. Как мне установить CORs с помощью lacinia-piedestment?
Вот код на стороне сервера (настраивается с помощью руководства по 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. Какое точное сообщение об ошибке браузер регистрирует в консоли devtools?
2. Сообщение об ошибке было «404 не найдено», хотя мне удалось это исправить (см. Ответ ниже).
Ответ №1:
Обновление: Мне удалось решить проблему, объединив мою сервисную карту пьедестала 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)))