首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Compojure路由丢失参数信息

Compojure路由丢失参数信息
EN

Stack Overflow用户
提问于 2011-07-30 10:06:40
回答 1查看 433关注 0票数 4

我的代码:

代码语言:javascript
复制
(defn json-response [data & [status]]
    {:status (or status 200)
     :headers {"Content-Type" "application/json"}
     :body (json/generate-string data)})

(defroutes checkin-app-handler
  (GET "/:code" [code & more] (json-response {"code" code "params" more})))

当我将文件加载到repl并运行此命令时,params似乎为空:

代码语言:javascript
复制
$ (checkin-app-handler {:server-port 8080 :server-name "127.0.0.1" :remote-addr "127.0.0.1" :uri "/123" :query-string "foo=1&bar=2" :scheme :http :headers {} :request-method :get})
> {:status 200, :headers {"Content-Type" "application/json"}, :body "{\"code\":\"123\",\"params\":{}}"}

我做错了什么?我需要获取query-string,但是params映射始终为空。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-31 18:35:31

为了将查询字符串解析到params映射中,您需要使用params中间件:

代码语言:javascript
复制
(ns n
  (:require [ring.middleware.params :as rmp]))

(defroutes checkin-app-routes
  (GET "" [] ...))

(def checkin-app-handler
  (-> #'checkin-app-routes
      rmp/wrap-params
      ; .. other middlewares
      ))

请注意,使用var (#'checkin-app-routes)并不是必须的,但是当您重新定义路由时,它会使包装在中间件中的路由闭合,从而获得更改。

IOW你也可以写

代码语言:javascript
复制
(def checkin-app-handler
  (-> checkin-app-routes
      rmp/wrap-params
      ; .. other middlewares
      ))

但是,当以交互方式重新定义路由时,您也需要重新定义处理程序。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6880641

复制
相关文章

相似问题

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