2011-12-12 26 views
1

我有一个Clojure的/ web应用程序的Compojure与预览GET请求与几个参数做了以下路线的Compojure defroutes - 路线有时不认可

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

。我觉得这个工作的大部分时间,但有时/电子书/预览未发现和处理下降到任何途径,在这种情况下,输出与此类似,

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

任何人都可以提出什么可能导致/电子书/预览请求被跳过?这绝对是一个GET请求; HTML没有针对/ app/preview URL的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

如果你想找出请求导致的问题,停止扔掉请求地图(request :params)和只需看看request。这会给你带有Compojure所有信息的地图;你可以检查它,并在稍后将它传递回你的路线,以观察发生了什么(在你做了一些改变之后)。

+0

谢谢。这是一个很好的建议。仍然没有快乐的工作,为什么正确的路线不会被拿起,但我会反馈,如果我工作了。 –

0

如果

(my-preview-function request) 

返回nil,那么路由会尝试下一个路径。看看(源GET),看看它是如何匹配(或不)你的路线。