如何使用ClojureScript和Figwheel与后端通信?
注意:一般来说,我是一名经验丰富的程序员,使用clojure,但从未进行过认真的web开发 我使用Chestnut建立了一个基本的ClojureScript项目,并很好地完成了“Hello World”的步骤。然而,我真的很想谈谈我的后端以及。为此,我将试剂代码重新定义为如何使用ClojureScript和Figwheel与后端通信?,clojure,clojurescript,ring,figwheel,Clojure,Clojurescript,Ring,Figwheel,注意:一般来说,我是一名经验丰富的程序员,使用clojure,但从未进行过认真的web开发 我使用Chestnut建立了一个基本的ClojureScript项目,并很好地完成了“Hello World”的步骤。然而,我真的很想谈谈我的后端以及。为此,我将试剂代码重新定义为 (defn greeting [] [:input {:type "button" :value (:text @app-state) :on-click #(http/get {})}])
(defn greeting []
[:input {:type "button"
:value (:text @app-state)
:on-click #(http/get {})}])
单击时会得到404响应。所以至少我在和某人说话。我还可以在server.log文件中看到get请求的证据。然而,在这一点上,我正在与一些概念上的观点作斗争
首先,http/get是在clj-http.client中定义的函数,它不是Chestnut设置的一部分。如果我不得不去找图书馆发送一些基本的get请求,感觉我已经偏离了轨道
其次,用户名称空间的文件具有Chestnut预定义的以下行:
(def http-handler
(wrap-reload #'mypage.server/http-handler))
(defn run []
(figwheel/start-figwheel!))
我看不到任何地方曾经使用过http处理程序。所以我不明白这个定义到底是什么意思
我对Figwheel的理解是,当我调用“run”时,它会启动一个新的web服务器,然后a)为index.html提供服务,b)通过某个TCP端口连接到我的浏览器,并开始通过该连接输出新的JavaScript。这第二部分对我来说是非常投机的。如果这真的发生了,我的下一个问题是Figwheel是否也需要位于连接的另一端,或者浏览器是否有一些允许从外部重新加载代码的通用API
最后,我可以说,在mypage/server.clj文件(如下)中定义的环路由和http处理程序正在以某种方式被调用,因为修改它们会改变get请求中的错误,但是这对我来说完全是个谜。按照我的理解,我从浏览器发送的get请求被发送到Figwheel服务器,即站点的来源。我没有理由相信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))
我没有一个完整的答案,但我有几点可能会有所帮助