Clojure Noir Json Put

Я работаю с учебным пособием Учебное пособие по REST Марка МакГранагана, однако я Вместо этого я пытаюсь сделать это с помощью Noir.

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

Я думаю, проблема в том, как я пытаюсь построить оператор put. Я думаю, что проблема с {:keys [id attrs]}, потому что я пытаюсь сказать, что содержимое json находится в URL-адресе, а если нет, то в теле. Может ли кто-нибудь посоветовать, как мне извлечь его из тела с помощью 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)))

person Dale    schedule 08.01.2012    source источник
comment
Какую версию нуара вы используете?   -  person toofarsideways    schedule 09.01.2012
comment
Если это все еще проблема для вас, и у вас есть суть этого, я, вероятно, мог бы попробовать... У меня такое чувство, что это довольно специфическая проблема...   -  person toofarsideways    schedule 10.01.2012
comment
Я закончил тем, что сделал это с прямым составом, так что я работаю с ним сейчас. Если я снова займусь этим в нуаре, я обновлю этот вопрос.   -  person Dale    schedule 11.01.2012
comment
@ Дейл, вам, вероятно, следует ответить и принять свой собственный вопрос, поэтому, если кто-то приземлится здесь в будущем, по крайней мере, у него будет одно возможное решение.   -  person Johanna Larsson    schedule 06.02.2012


Ответы (3)


Если вы передаете «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"}}
person mikebridge    schedule 29.04.2012

Используйте функцию промежуточного программного обеспечения Криса Грейнджера для разбора JSON из здесь, и используйте его, как описано здесь для получения JSON. данные.

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

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

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

person Dax Fohl    schedule 17.05.2012

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

person Rayne    schedule 28.04.2012