2012-10-20 6 views
6
([compojure "1.0.1"]) her zaman aşağıda ekleyerek sarmalı parametreler vb Kod numunesi rağmen boş parametre haritası aldı

Benim Compojure web uygulaması: denedimCompojure rota params boş

(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-anahtar kelime-params ve wrap-multipart-params ekleyerek ama ben httpie (veya benim müşteri) kullanarak son noktaya PUT, bu params her zaman boş olduğunu buluyorum. Biri yardım edebilir mi?

Teşekkürler!

+2

senin sorunun compojure rota çözünürlüklü veya şal-params tarafından çıkarılan değildir params olup olmadığını belirlemek için, geçici olarak size tavsiye edebilir '(public-routes [req] (println req)) 'yi tanımlayın, böylece tüm Ring istek haritasını görebilirsin? –

cevap

1

Örnek kodunuzdaki tek sorun, rota gövdesinde bir halka yanıt karması haritasından yoksun olmasıdır. Çözüm, println kullanmak yerine bir halka yanıtı olarak değerlendirilir. Rotanızda println çağıracağınız zaman, API işlemine verilen yanıtla hiçbir ilgisi olmayan sunucu işleminin nerede çalıştığını standart olarak yazdırır.

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

Bu yanıt, gövde olarak Params: {"foo" "bar"} ile 200 tepki üretir. Ben senin PUT rotayı sınamak için bu kullanıyorum

:

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

Hala yanlış yapıyor olabilirim ama korkarım ki bana derleme zamanı hatası veriyor, ikincisi de aynı boş param koleksiyonunu üretiyor. – jamiei

+0

Minimal bir projeyi gist veya git repo olarak yayınlayabilir misiniz? – rplevy

+0

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