compoujure defroutes - маршрут иногда не распознается - PullRequest
1 голос
/ 12 декабря 2011

У меня есть веб-приложение clojure / compojure со следующими маршрутами

(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"}

Может кто-нибудь подсказать, что может привести к пропуску запроса / ebook / preview? Это определенно GET-запрос; HTML-код не имеет POST для URL-адреса / app / preview, и чтобы быть вдвойне уверенным, я добавил POST-маршрут для / app / preview, но это не ударил.

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 ]

2 голосов
/ 12 декабря 2011

Если вы пытаетесь выяснить, какой запрос вызывает проблемы, прекратите выбрасывать карту запросов с помощью (request :params) и просто посмотрите на request.Это даст вам карту со всей информацией, которую имеет Compojure;вы можете проверить его и позже передать его обратно в свои маршруты, чтобы посмотреть, что произойдет (скажем, после внесения некоторых изменений).

0 голосов
/ 10 мая 2014

Если

(my-preview-function request)

возвращает ноль, то при маршрутизации будет выполнен следующий маршрут.Посмотрите на (источник GET) и посмотрите, как он соответствует (или не соответствует) вашему маршруту.

...