我正在尝试使用clojure / clojurescript分别为后端/前端构建一个简单的Web应用程序。我在通过http请求建立两者之间的通信时遇到问题,我觉得我的问题在前端,但是我不确定。
这是我的后端代码:
(ns example.handler
(:require [compojure.core :refer :all]
[compojure.route :as route]
[clojure.data.json :as json]
[clj-http.client :as client]
[datomic.api :as d]
[ring.util.response :as resp]
[ring.middleware.defaults :refer [wrap-defaults site-defaults]])
(:use [hiccup.core]))
;; Route
(defroutes app-routes
(GET "/info" [] (json/write-str {:data (some-function x)})))
到目前为止,当我转到localhost:3000/info
时,在浏览器上看到类似{"data":10}
之类的东西,这是预期的结果。我读到,使用cljs-http是clojurescript请求的标准,因此我遵循了仓库中的简单示例,我的代码如下:
(ns example-cljs.core
(:require [reagent.core :as reagent :refer [atom]]
[clojure.core.async :as async]
[cljs-http.client :as http]))
(def example-req (atom nil))
(defn get-data []
(async/go
(let [response (async/<! (http/get "localhost:3000/info"))]
(reset! example-req response))))
但是响应只是{:status 0, :success true, :body "", :headers {}, :trace-redirects ["localhost:3000/info" "localhost:3000/info"], :error-code :no-error, :error-text ""}
我觉得这是一个菜鸟错误,但是我根本找不到它。
感谢您的帮助或提示。
答案 0 :(得分:0)
因此,经过一番研究后,我发现this教程是这样的,所以我只是复制粘贴发现可以解决问题的内容:
将ring-cors依赖项添加到project.clj中的hello-compojure。
:dependencies [[org.clojure/clojure "1.10.0"]
[org.clojure/tools.nrepl "0.2.13"]
[com.datomic/datomic-pro "0.9.6024"]
[org.clojure/data.json "0.2.6"]
[ring-cors "0.1.13"]
[compojure "1.6.1"]
[hiccup "1.0.5"]
[ring/ring-defaults "0.3.2"]]
在服务器的handler.clj中需要它。
(ns hello-compojure.handler
(:require [compojure.core :refer :all]
[compojure.route :as route]
[datomic.api :as d]
[clojure.data.json :as json]
[ring.util.response :as resp]
[ring.middleware.cors :refer [wrap-cors]]
[ring.middleware.defaults :refer [wrap-defaults site-defaults]])
最后用以下命令替换handler.clj中的应用程序定义:
(def app
(-> app-routes
(wrap-cors :access-control-allow-origin [#".*"]
:access-control-allow-methods [:post :get]
:access-control-allow-credentials "true"
:access-control-allow-headers "Content-Type, Accept, Authorization, Authentication, If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since")
(wrap-defaults (assoc-in site-defaults [:security :anti-forgery] false))))