2012-01-08 31 views
5

我正在通過教程Mark McGranaghan REST Tutorial但我試圖用Noir來代替它。Clojure Noir Json把

我可以添加新項目,但它永遠不會佔用PUT命令的主體。

我想我如何構建put語句的問題。我在考慮{:keys [id attrs]}是個問題,因爲我試圖告訴它,json內容在url中,當它不在時,它在body中。任何人都可以建議如何使用noirs defpage從身體檢索它?

(放是在一個單獨的文件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

您使用的是哪個版本的noir? – toofarsideways 2012-01-08 21:09:23

+0

我正在使用1.2.1 – Dale 2012-01-09 18:58:28

+0

如果這對你仍然是一個問題,你有這個謊言的主旨我可能會採取一個裂縫...我有一種感覺這是一個非常具體的問題... – toofarsideways 2012-01-10 12:26:37

回答

0

因此,這些都是形式參數?如果是這樣,像你這樣解構參數應該工作得很好。您可以使用noir.request在defpage中獲得整個請求。我會看看它,看看它包含什麼。它應該明確地闡明事情。

2

如果您在後,然後將工作傳遞「ATTRS = someValue中」,但如果你想捕捉所有的鍵值對,這對我的作品在1.3.0-β1:

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

則:

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

使用克里斯·格蘭傑的JSON-解析來自here中間件功能,並把它作爲描述here接收JSON數據。

在您的情況下,它會像

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

但是你只需要添加一個「骨架」(我親自給它改名爲「JSON-PARAMS」)中間件第一。