首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Compojure:如何映射查询参数

Compojure:如何映射查询参数
EN

Stack Overflow用户
提问于 2011-10-16 15:20:26
回答 1查看 10.3K关注 0票数 11

我试图使下列任何映射都能映射http://mysite.org/add?http://sitetoadd.comhttp://mysite.org/add?u=http://sitetoadd.com

代码语言:javascript
复制
  (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)

但失败了我不知道为什么。另一方面,这起作用是:

代码语言:javascript
复制
  (GET "/add/:url" [url] url)

但是我不能使用它,因为我必须传递一个url,而http://mysite.org/add/http://sitetoadd.com是无效的,而http://mysite.org/add?http://sitetoadd.com is是ok的。

编辑:转储request --我看到params是空的。我以为它会包含POST GET参数,但是唯一能找到我传递的参数的地方是在 ("u=asd")中。需要一个中间件来解析查询字符串,这是seems。顺便说一句,我的问题一成不变。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-16 16:25:43

请参阅“打破更改”下的https://github.com/weavejester/compojure。默认情况下,params映射不再绑定。如果您的示例路由在"(defroutes that .)“中,请确保您通过”(处理程序/站点主路由)“激活它”(处理程序/站点主路由)",因为是站点或api方法确保params映射在默认情况下被绑定。

下面是一个有用的例子:

代码语言:javascript
复制
(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}))
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7785214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档