2012-01-08 4 views
5

Я работаю через учебник Mark McGranaghan REST Tutorial, однако я пытаюсь сделать это, используя Noir.Clojure Noir Json Put

Я могу добавить новые элементы, однако он никогда не принимает тело команды PUT.

Я думаю, проблема с тем, как я пытаюсь построить оператор put. Я думаю, что проблема {: keys [id attrs]} является проблемой, потому что я пытаюсь сказать, что содержимое json находится в URL-адресе, когда его нет, его в теле. Может ли кто-нибудь посоветовать, как я получаю его из тела, используя noirs defrace?

(положить в отдельный файл Элем)

(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

+0

Я использую 1.2.1 – Dale

+0

Если это все еще проблема для вас, и у вас есть суть этого, лежащего вокруг, я, вероятно, мог бы взломать его ... У меня такое чувство, это довольно специфическая проблема ... – toofarsideways

ответ

0

Так что эти параметры формы? Если это так, деструктивные параметры, как вы делали здесь, должны работать нормально. Вы можете получить весь запрос внутри defpage, используя noir.request. Я бы посмотрел на это и посмотрел, что он содержит. Это должно прояснить ситуацию.

2

Если вы передаете «AttrS = SomeValue» в посте то, что будет работать, но если вы пытаетесь захватить все пары ключ-значение, это работает для меня в 1.3.0-beta1:

(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») промежуточный слой первым.

 Смежные вопросы

  • Нет связанных вопросов^_^