11

我正在尝试使以下任何映射都可以映射http://mysite.org/add?http://sitetoadd.comhttp://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 并且在正常http://mysite.org/add/http://sitetoadd.com时无效http://mysite.org/add?http://sitetoadd.com is

编辑:倾销request我已经看到参数是空的。我认为它会包含 POSTGET 参数,但我可以找到传递的参数的唯一地方是:query-string ("u=asd")。似乎需要一个中间件来解析查询字符串。顺便说一句,我的问题仍然存在。

4

1 回答 1

20

请参阅重大更改下的https://github.com/weavejester/compojure 。默认情况下不再绑定 params 映射。如果您在“(defroutes main-routes ...)”中有示例路由,请确保通过“(handler/site main-routes)”激活它,如https://github.com/weavejester/compojure中所述/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 回答