2012-10-20 25 views
6

My Compojure ứng dụng web ([compojure "1.0.1"]) luôn nhận được một bản đồ tham số rỗng, mặc dù thêm bọc params-, vv Mã mẫu dưới đây:đường Compojure params trống

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

Tôi đã thử thêm wrap-params, wrap-keyword-params và wrap-multipart-params nhưng khi tôi PUT đến điểm cuối sử dụng httpie (hoặc máy khách của tôi), tôi thấy rằng các tham số luôn rỗng. Có ai giúp được không?

Cảm ơn!

+2

Để xác định xem vấn đề của bạn là trong compojure đường nét hoặc trong params không được chiết xuất bằng cách quấn-params, tôi có thể khuyên bạn nên tạm thời '(defn public-routes [req] (println req))' để bạn có thể xem toàn bộ bản đồ yêu cầu Ring? –

Trả lời

1

Vấn đề duy nhất với mã ví dụ của bạn là nó thiếu bản đồ băm phản hồi vòng trong thân tuyến. Giải pháp được đánh giá thành phản hồi vòng thay vì sử dụng println. Khi bạn gọi println trong tuyến đường của bạn, nó sẽ in ra tiêu chuẩn nơi quy trình máy chủ đang chạy, không có gì liên quan đến phản hồi đối với cuộc gọi API.

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

Điều này tạo ra phản hồi 200 với Params: {"foo" "bar"} làm cơ sở phản hồi.

Tôi đang sử dụng này để kiểm tra tuyến đường PUT của bạn:

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

Tôi có thể vẫn làm điều đó sai, nhưng tôi sợ trước đây mang lại cho tôi một lỗi thời gian biên dịch, sau này tạo ra cùng một bộ sưu tập params trống. – jamiei

+0

bạn có thể đăng một dự án đầy đủ tối thiểu như một gist hoặc git repo? – rplevy

+0

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

Các vấn đề liên quan