Compojure: 如何映射查询参数

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是可以的。

编辑:转储request后发现参数为空。我以为它会包含POSTGET参数,但我只能在:query-string("u=asd")中找到我传递的参数。 似乎需要一个中间件来解析查询字符串。 无论如何,我的问题仍然存在。

1个回答

20

请参见https://github.com/weavejester/compojure的Breaking Changes部分。params映射默认不再绑定。如果您将示例路由放在“(defroutes main-routes ...)”中,请确保按照https://github.com/weavejester/compojure/wiki/Getting-Started中所述通过“(handler/site main-routes)”激活它,因为site或api方法会默认绑定params映射。

这是一个可行的示例:

(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}))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接