5

私はチュートリアルMark McGranaghan REST Tutorialに取り組んでいますが、代わりに 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)))
4

3 に答える 3

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"}}
于 2012-04-29T02:33:24.363 に答える
1

ここから Chris Granger の JSON 解析ミドルウェア関数を使用し、ここで説明さているように使用してJSON データを受け取ります。

あなたの場合、それは次のようになります

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

ただし、その「バックボーン」(私は個人的に「json-params」に名前を変更しました) ミドルウェアを最初に追加する必要があります。

于 2012-05-17T03:34:02.793 に答える
0

では、これらはフォームパラメータですか?もしそうなら、ここで行ったようなパラメータの破棄は問題なく機能するはずです。を使用して、defpage内でリクエスト全体を取得できますnoir.request。私はそれを見て、それが何を含んでいるかを見ていきます。それは物事を大幅に明確にする必要があります。

于 2012-04-28T19:41:50.403 に答える