Clojure Noir Json Put - PullRequest
       48

Clojure Noir Json Put

5 голосов
/ 08 января 2012

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 29 апреля 2012

Если вы передаете «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 голос
/ 17 мая 2012

Используйте функцию промежуточного ПО JSON-синтаксического анализа Chris Granger из здесь и используйте ее, как описано здесь для получения данных JSON.

в вашем случае это будет выглядетькак

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

Но вам просто нужно сначала добавить эту промежуточную программу (я лично переименовал ее в «json-params»).

0 голосов
/ 28 апреля 2012

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

...