2012-10-20 63 views
6

我的Compojure web應用程序([的Compojure 「1.0.1」])始終接收一個空的參數映射,儘管加入渦卷-PARAMS等代碼下面的示例:的Compojure路線PARAMS空

(defroutes public-routes 
    (PUT "/something" {params :params} 
     (println (str "Params: " params)) 
     (do-put-something params))) 

(def myapp 
    (-> public-routes 
     ring-params/wrap-params)) 

(defn start-server [] 
    (future (jetty/run-jetty (var myapp) {:port 8080}))) 

我已經試過添加wrap-params,wrap-keyword-params和wrap-multipart-params,但是當我使用httpie(或我的客戶端)放到端點時,我發現參數總是空的。誰能幫忙?

謝謝!

+2

要確定您的問題是否是在的Compojure路線清晰或不被總結PARAMS提取的參數,可以,我可以建議您暫時'(defn public-routes [req](println req))'所以你可以看到整個Ring請求地圖? –

回答

1

您的示例代碼唯一的問題是它在路由主體中缺少響應哈希映射。該解決方案將評估爲環響應而不是使用println。當您在路由中調用println時,它會將服務器進程的運行標準打印出來,這與對API調用的響應無關。

(defroutes public-routes 
    (PUT "/something" {params :params} 
    {:status 200 
    :body (str "Params: " params)})) 

這產生了一個200響應,Params: {"foo" "bar"}作爲響應主體。

我用這來測試你的PUT路線:

curl -X PUT -d "foo=bar" http://127.0.0.1:8080/something 
+0

我可能仍然在做錯,但恐怕前者給我一個編譯時錯誤,後者產生相同的空params集合。 – jamiei

+0

你可以發佈一個最小完整的項目作爲gist或git repo嗎? – rplevy

+0

https://gist.github.com/1f74b817ca5d306af9f3 – jamiei