Примечание: Я умеренно опытный программист в целом и использую clojure, но никогда не делал серьезных веб-разработок.Как я могу связываться с бэкэнд с помощью ClojureScript и Figwheel?
Я установил базовый проект ClojureScript с использованием каштана и прошел через шаги «Hello World» просто отлично. Однако мне бы очень хотелось поговорить с моим бэкэндом. Для этого я пересмотрел код Реагент быть
(defn greeting []
[:input {:type "button"
:value (:text @app-state)
:on-click #(http/get {})}])
Что получает ответ 404 при нажатии. По крайней мере, я говорю с кем-то. Я также вижу доказательства моих запросов на получение в файле server.log. Однако на данный момент я борюсь с несколькими концептуальными точками.
Прежде всего http/get - это функция, определенная в clj-http.client, которая не была частью настройки каштана. Похоже, я уже не в курсе, если мне нужно пойти на поиски библиотек, чтобы отправить что-то как основное, как запрос на получение.
Во-вторых, файл для имен пользователя имеет следующие строки предопределенные каштан:
(def http-handler
(wrap-reload #'mypage.server/http-handler))
(defn run []
(figwheel/start-figwheel!))
Я не могу видеть любое место, где HTTP-обработчик когда-либо использовал. Поэтому я не понимаю, что такое определение.
Также, как я понимаю, «Фигур», когда я называю «запустить», будет разворачивать новый веб-сервер, который затем a) обслуживает index.html и b) подключается к моему браузеру через какой-то порт TCP и начинает накачку новых JavaScript через это соединение. Эта вторая часть очень спекулятивная с моей стороны. Если это на самом деле то, что будет, мой следующий вопрос будет состоять в том, что Figuheel также должен сидеть на другой стороне этого соединения или если браузеры имеют некоторый общий API, который позволяет перезагрузить код извне.
Наконец, я могу сказать, что кольцевые маршруты и http-обработчик, определенные в файле mypage/server.clj (ниже), вызываются каким-то образом, так как изменение этих изменений приводит к ошибке из запроса get, однако это полная тайна для меня, как это работает. То, как я понимаю, запрос get-request, который я отправляю из браузера, отправляется на Figuheel-сервер, происхождение сайта. У меня нет оснований полагать, что Фигуэл знает что-нибудь о http-обработчиках, которые я определил в файле сервера.
(defroutes routes
(GET "/" _
{:status 200
:headers {"Content-Type" "text/html; charset=utf-8"}
:body (io/input-stream (io/resource "public/index.html"))})
(resources "/"))
(def http-handler
(-> routes
(wrap-defaults api-defaults)
wrap-with-logger
wrap-gzip))