compojure defroutes - 路线有时无法识别

时间:2011-12-12 07:21:56

标签: clojure compojure

我有一个具有以下路线的clojure / compojure webapp

(defroutes my-routes
 (GET "/app/preview" request  (my-preview-function request))
 (ANY "*" request (str "ANY page <br>" (request :params))))

预览GET请求由几个参数组成。我发现大部分时间都可以使用,但有时候找不到/ ebook / preview,处理会下降到任何路径,在这种情况下输出类似于此,

ANY page 
{:* "/app/preview", :section "50", :id "48"}

有人可以建议可能导致跳过/电子书/预览请求的内容吗?这绝对是一个GET请求; HTML没有针对/ app / preview网址的POST,并且更加确定我为/ app / preview添加了一条POST路由并且没有被点击。

JAR版本:

Clojure 1.2
compojure-0.6.2
ring-core-0.3.7
jetty-6.1.14
ring-jetty-adapter-0.3.1
ring-servlet-0.3.1jar
servlet-api-2.5-6.1.14

路线包装如下

(require '[compojure.handler :as handler])

(defn wrap-charset [handler charset]
  (fn [request]
    (if-let [response (handler request)]
      (if-let [content-type (get-in response [:headers "Content-Type"])]
        (if (.contains content-type "charset")
          response
          (assoc-in response
            [:headers "Content-Type"]
            (str content-type "; charset=" charset)))
        response))))

(def app (-> my-routes
           handler/site
           wrap-stateful-session
           (wrap-charset "utf-8")
           (wrap-file "public")))

(defn run []
  (run-jetty (var app) {:join? false :port 8080}))

2 个答案:

答案 0 :(得分:2)

如果您正在尝试找出导致问题的请求,请停止使用(request :params)丢弃请求地图,然后查看request。这将为您提供包含Compojure所有信息的地图;你可以检查它,然后将它传回你的路线以观察会发生什么(比如你做了一些改变之后)。

答案 1 :(得分:0)

如果

(my-preview-function request)

返回nil,然后路由将尝试下一个路由。看看(来源GET),看看它与你的路线是否匹配(或没有)。