【问题标题】:Compojure route params emptyCompojure 路由参数为空
【发布时间】:2012-10-11 00:50:41
【问题描述】:

尽管添加了 wrap-params 等,但我的 Compojure Web 应用程序 ([compojure "1.0.1"]) 总是收到一个空的参数映射。下面的代码示例:

(defroutes public-routes
  (PUT "/something" {params :params}
      (println (str "Params: " params))
      (do-put-something params)))

(def myapp 
  (-> public-routes
      ring-params/wrap-params))

(defn start-server []
  (future (jetty/run-jetty (var myapp) {:port 8080})))

我尝试添加 wrap-params、wrap-keyword-params 和 wrap-multipart-params,但是当我使用 httpie(或我的客户端)将 PUT 到端点时,我发现 params 始终为空。有人可以帮忙吗?

谢谢!

【问题讨论】:

  • 要确定你的问题是在compojure route-definition还是在wrap-params没有提取的params,我可以建议你暂时(defn public-routes [req] (println req))这样你就可以看到整个Ring request map ?

标签: clojure compojure


【解决方案1】:

您的示例代码的唯一问题是它在路由正文中缺少环响应哈希映射。解决方案是评估为响铃响应,而不是使用 println。当您在路由中调用 println 时,它会打印到服务器进程正在运行的标准输出,这与对 API 调用的响应无关。

(defroutes public-routes
  (PUT "/something" {params :params}
    {:status 200
     :body (str "Params: " params)}))

这会产生一个以Params: {"foo" "bar"} 作为响应正文的 200 响应。

我正在使用它来测试你的 PUT 路由:

curl -X PUT -d "foo=bar" http://127.0.0.1:8080/something

【讨论】:

  • 我可能仍然做错了,但我担心前者会给我一个编译时错误,后者会产生相同的空参数集合。
  • 你能发布一个最小的完整项目作为 gist 或 git repo 吗?
  • 你也可以发布你的 project.clj 文件吗?
  • 编辑了我的回复并回答了您的原始问题。
猜你喜欢
  • 2014-06-30
  • 1970-01-01
  • 2011-04-23
  • 2022-01-17
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-25
相关资源
最近更新 更多