2012-10-20 5 views
6

Meine Compojure Web-App ([compojure "1.0.1"]) immer eine leere Parameterkarte Beispiel unten, trotz Zugabe von Wrap-params usw.-Code empfängt:Compojure Route params leer

(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}))) 

Ich habe versucht, Fügen Sie die Parameter wrap-params, wrap-keyword-params und wrap-multipart-params hinzu, aber wenn ich mit httpie (oder meinem Client) auf den Endpunkt setze, finde ich, dass params immer leer ist. Kann jemand helfen?

Danke!

+2

Um festzustellen, ob Ihr Problem in der compojure Route-Definition ist oder in dem params nicht durch Wrap-params extrahiert wird, kann ich empfehlen, dass Sie vorübergehend '(defn public-routes [req] (println req))' damit Sie die gesamte Ring-Anforderungskarte sehen können? –

Antwort

1

Das einzige Problem mit Ihrem Beispiel-Code war, dass es keine Ring-Response-Hash-Karte im Körper der Route fehlt. Die Lösung wird für eine Ringantwort ausgewertet, anstatt println zu verwenden. Wenn Sie in Ihrer Route println aufrufen, wird der Standardoutput für den Serverprozess ausgegeben, der nichts mit der Antwort auf den API-Aufruf zu tun hat.

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

Dies erzeugt eine 200-Antwort mit Params: {"foo" "bar"} als Antwort Körper.

ich dies mit Ihrer PUT Route testen:

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

Ich könnte es immer noch falsch machen, aber ich fürchte, der erste gibt mir einen Kompilierfehler, letzterer produziert die gleiche leere params Sammlung. – jamiei

+0

können Sie ein minimales vollständiges Projekt als Gist oder Git Repo posten? – rplevy

+0

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