在Clojure / Ring / HttpKit应用程序中获取POST数据

问题描述 投票:0回答:1

我正在编写一个简单的HttpKit / Ring应用程序,并试图将一些数据从表单发布到它。

这是我的服务器代码的相关部分:

(defn save-page [request]
  (let [qs (:query-string request)
        fp (:form-params request)]
    (println "SAVE PAGE :: ")
    (println (str request))
    (println (str "CCCC" fp))
    (println (str qs))))

(defn handler [{:keys [uri request-method] :as request}]
  (let []
    (cond 
      ; view a page 
      (= uri "/clj_ts/view")
      (get-page request)

      (= uri "/clj_ts/save")
      (save-page request)

      :otherwise 

      .. STUFF )))

(defn -main [& args]
  (-> #'handler
      (wrap-content-type)
      (wrap-keyword-params)
      (wrap-params)
      (wrap-reload)
      (wrap-resource "clj_ts")
      (run-server {:port 0})))

这是发布到它的客户端代码。

(defn generate-form-data [params]
  (let [form-data (js/FormData.)]
    (doseq [[k v] params]
      (.append form-data (name k) v))
    form-data))

(defn save-page! []
  (let [page-name (-> @db :current-page)
        new-data (-> js/document
                     (.getElementById "edit-field") 
                     .-value)
        form-data (generate-form-data 
                    {"page" page-name
                     "data" new-data})] 
    (js/console.log "SAVING")
    (js/console.log (str new-data))
    (.send XhrIo
      "/clj_ts/save"
      (fn [e] e)
      "POST"
      form-data)))

现在,我从浏览器的开发人员工具中看到,我正在使用包含页面和数据值的表单数据过帐某些东西。

但是在我的服务器端代码中,请求的:form-params为空。

我想念什么或做错什么了?

clojure clojurescript http-kit xhrio clojure-ring
1个回答
0
投票

我总是use the library cljs-ajax而不是直接JS互操作。然后,您可以执行以下操作:

cljs-ajax
© www.soinside.com 2019 - 2024. All rights reserved.