注意:我是一名经验丰富的程序员,使用clojure但从未进行过严肃的Web开发.
我使用Chestnut设置了一个基本的ClojureScript项目,并且完成了“Hello World”步骤.但是,我真的想和我的后端交谈.为此,我重新定义了试剂代码
(defn greeting []
[:input {:type "button"
:value (:text @app-state)
:on-click #(http/get {})}])
单击时获得404响应.所以至少我和某个人说话.我还可以在server.log文件中看到我的get-requests的证据.然而,在这一点上,我正在努力解决一些概念问题.
首先,http / get是clj-http.client中定义的函数,它不是Chestnut设置的一部分.如果我不得不去寻找图书馆发送基本内容作为获取请求,我觉得我已经偏离了轨道.
其次,用户命名空间的文件具有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-handler,因为修改这些会改变get-request中的错误,但是对我来说这是一个完全的谜这很有效.我理解它的方式是我从浏览器发送的get-request被发送到Figwheel-server,即站点的起源.我没有理由相信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))
最佳答案 对于ClojureScript项目(即不是Clojure),我相信你想要这个:
https://github.com/r0man/cljs-http