2016-06-20 7 views
3

Примечание: Я умеренно опытный программист в целом и использую 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)) 

ответ

0

У меня нет полного ответа, но у меня есть пара вопросов, которые могут помочь.

  1. Clojurescript в конечном счете, компилирует в JavaScript, и делает интенсивное использование (и имеет доступ к библиотеке) Google Closure. Поэтому, если вы действительно этого хотите, вы можете использовать JavaScript-интерфейс для простого вызова AJAX с клиентской стороны, как и в JS. Библиотека закрытия предоставляет оболочку для этого - см. Здесь документы https://developers.google.com/closure/library/docs/xhrio. Но есть также несколько простых библиотек http и Ajax для clojurescript, так почему бы им не использовать их? Другая часть радости и магии clojurescript заключается в том, что оптимизация закрытия Google, которая применяется, делает прекрасные вещи, такие как вырезать мертвый код, поэтому я верю (и кто-то другой может исправить меня, если я ошибаюсь), что мало (нет?) производственные затраты на добавление некоторых дополнительных библиотек.

  2. Figwheel в конечном счете является разработчиком, а не производством, и не зависит от сервера http, который вы настроили для использования в производстве. Действительно, есть шаблоны для проектов только для front-end-cljs, которые все еще используют figwheel --- вот one example. Figwheel вращает собственный сервер, чтобы вносить изменения в браузер, я не совсем уверен, как это работает.

 Смежные вопросы

  • Нет связанных вопросов^_^