我正在学习教程Mark McGranaghan REST Tutorial,但是我尝试使用Noir来完成它。
我可以添加新的条目,但是它从不占用PUT命令的主体。
我认为我试图构造put语句的问题。我认为{:keys id attrs}是问题所在,因为我试图告诉它json内容在url中,如果不在,则在正文中。有人能建议我如何使用noir defpage从正文中检索它吗?
(put在一个单独的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)))发布于 2012-04-29 10:33:24
如果你在post中传递"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"}}发布于 2012-05-17 11:34:03
从here中使用Chris Granger的JSON-parsing中间件函数,并按照描述的here使用它来接收JSON数据。
在您的情况下,它将看起来像
(defpage [:put "/elems/:id"] {{:keys [attr1 attr2 attr3]} :backbone }
"OK")但您只需首先添加"backbone“(我个人将其重命名为"json-params")中间件。
发布于 2012-04-29 03:41:50
所以这些都是表单参数?如果是这样的话,像你在这里做的那样解构参数应该可以很好地工作。您可以使用noir.request在defpage中获取整个请求。我会看看这个,看看里面有什么。它应该会让事情变得清晰起来。
https://stackoverflow.com/questions/8779634
复制相似问题