11

次のマッピングのいずれかをマッピングhttp://mysite.org/add?http://sitetoadd.comまたはhttp://mysite.org/add?u=http://sitetoadd.com

  (GET "/add?:url" [url] url)
  (GET "/add?u=:url" [url] url)
  (GET "/add" {params :params} (params :u))
  (GET "/add" {params :params} (params "u"))
  (GET "/add" [u] u)

しかし、それは失敗するだけで、理由はわかりません。一方、これは機能します。

  (GET "/add/:url" [url] url)

しかし、URLを渡す必要があり、 OKのhttp://mysite.org/add/http://sitetoadd.com間は無効であるため、使用できません。http://mysite.org/add?http://sitetoadd.com is

編集:ダンプrequest私はparamsが空であることを見ました。POSTパラメータとGETパラメータが含まれると思いましたが、渡すパラメータを見つけることができるのは:query-string( "u = asd")だけです。クエリ文字列を解析するにはミドルウェアが必要なようですちなみに、私の質問はじっとしている。

4

1 に答える 1

20

破壊的変更のhttps://github.com/weavejester/compojureを参照してください。params マップはデフォルトでバインドされなくなりました。「(defroutes main-routes ... )」内にサンプル ルートがある場合は、https://github.com/weavejester/compojureで説明されているように、「(handler/site main-routes)」を介して有効化してください。 /wiki/Getting-Startedは、params マップがデフォルトで確実にバインドされるようにするサイトまたは API メソッドであるためです。

動作する例を次に示します。

(ns hello-world
  (:use compojure.core, ring.adapter.jetty)
  (:require [compojure.route :as route]
            [compojure.handler :as handler]))

(defroutes main-routes
  (GET "/" {params :params} (str "<h1>Hello World</h1>" (pr-str params)))
  (route/not-found "<h1>Page not found</h1>"))

(defn -main [& m]
  (run-jetty (handler/site main-routes) {:port 8080}))
于 2011-10-16T16:25:43.007 に答える