2012-01-08 18 views
5

Tôi đang làm việc thông qua hướng dẫn Mark McGranaghan REST Tutorial tuy nhiên tôi đang cố gắng thực hiện việc đó bằng cách sử dụng Noir.Clojure Noir Json Đặt

Tôi có thể thêm các mục mới, tuy nhiên nó không bao giờ lấy phần thân của lệnh PUT.

Tôi nghĩ rằng vấn đề với cách tôi đang cố gắng xây dựng câu lệnh đặt. Tôi đang nghĩ rằng {: keys [id attrs]} là vấn đề, bởi vì tôi đang cố gắng nói với nó rằng nội dung json nằm trong url, khi nó không ở trong phần thân của nó. Bất cứ ai có thể tư vấn cho tôi như thế nào lấy nó từ cơ thể bằng cách sử dụng defir noirs?

(đặt là trong một file riêng biệt elem)

(defn put [id attrs] 
    (let [new-attrs (merge (get id) attrs)] 
    (swap! elems assoc id new-attrs) 
    new-attrs)) 

(defpage [:put "/elems/:id"] {:keys [id attrs]} 
    (json-response (elem/put id attrs))) 
+0

Bạn đang sử dụng phiên bản noir nào? – toofarsideways

+0

Tôi đang sử dụng 1.2.1 – Dale

+0

Nếu điều này vẫn còn là một vấn đề cho bạn và bạn có một ý chính của điều này nằm xung quanh tôi có thể có thể mất một vết nứt ở đó ... Tôi có một cảm giác đây là một vấn đề khá cụ thể ... – toofarsideways

Trả lời

0

Vì vậy, đây là những thông số hình thức? Nếu vậy, các tham số phá hoại như bạn đã làm ở đây sẽ hoạt động tốt. Bạn có thể nhận toàn bộ yêu cầu bên trong trang web bằng cách sử dụng noir.request. Tôi sẽ xem xét điều đó và xem những gì nó chứa. Nó nên làm rõ những điều đáng kể.

2

Nếu bạn đang đi qua "attrs = somevalue" trong bài sau đó sẽ làm việc, nhưng nếu bạn đang cố gắng để nắm bắt tất cả các cặp khóa-giá trị, điều này làm việc cho tôi trong 1.3.0-beta1:

(defpage [:put "/elems/:id"] attrs 
    (response/json {:attrs attrs})) 

thì:

$ curl -H "Accept: application/json" -X PUT -d "foo=bar" http://localhost:8080/elems/123 
=> {"attrs":{"id":"123","foo":"bar"}} 
1

sử dụng Chris Granger của JSON-phân tích chức năng trung gian từ here, và sử dụng nó như mô tả here để nhận dữ liệu JSON.

trong trường hợp của bạn, nó sẽ trông giống như

(defpage [:put "/elems/:id"] {{:keys [attr1 attr2 attr3]} :backbone } 
     "OK") 

Nhưng bạn chỉ cần thêm rằng "xương sống" (Cá nhân tôi đổi tên nó thành "json-params") middleware đầu tiên.