注:私は、一般的には適度に経験豊富なプログラマーで、clojureを使用していますが、深刻なWeb開発を行ったことはありません。ClojureScriptとFigwheelを使用してバックエンドと通信するにはどうすればよいですか?
私はChestnutを使って基本的なClojureScriptプロジェクトをセットアップし、 "Hello World"の手順をうまく歩いていきました。しかし、私は本当に私のバックエンドと話したいと思います。この目的のために私がクリックしたときに404応答を取得
(defn greeting []
[:input {:type "button"
:value (:text @app-state)
:on-click #(http/get {})}])
する試薬コードを再定義しました。だから少なくとも私は誰かと話している。私はまた、server.logファイルに自分のget-requestの証拠を見ることができます。しかし、この時点で私はいくつかの概念的な点で苦労しています。
最初にhttp/getは、Chestnutセットアップの一部ではないclj-http.clientで定義された関数です。私がライブラリーのために狩りをして取得リクエストのようなものを送る必要があるなら、私はすでにオフトラックのように感じます。
第二に、ユーザーの名前空間のファイルには、栗によってあらかじめ定義され、以下の行を持っています
(def http-handler
(wrap-reload #'mypage.server/http-handler))
(defn run []
(figwheel/start-figwheel!))
私はHTTPハンドラがこれまで使用されている任意の場所を見ることができません。だから私はその定義が何をしているのか理解していない。
また、FIGwheelを理解する方法では、「実行」と呼ぶと新しいWebサーバーを起動し、a)index.htmlを提供し、b)一部のTCPポート経由でブラウザに接続し、新しいその接続を介してJavaScript。この第二の部分は私の側で非常に投機的です。これが実際に起こっているのは、Figwheelもその接続の反対側に座る必要がある場合、またはブラウザに外部からのコードの再読み込みを可能にする共通のAPIがある場合です。
最後に、mypage/server.cljファイル(下記)で定義されているリングルートとhttpハンドラが、何らかの形で呼び出されていることが分かります。これらの変更はget-requestからのエラーを変更するためですが、どのようにこの作品が私に謎です。私がそれを理解する方法は、私がブラウザから送信しているget-requestは、フィギュアサーバに送信され、サイトの起源です。私はFigwheelが私がサーバーファイルで定義した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))