1

私は次のルートを持つclojure/compojurewebappを持っています

(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には/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}))
4

2 に答える 2

2

問題の原因となっているリクエストを特定しようとしている場合は、でリクエストマップを破棄するのをやめ(request :params)て、を見てくださいrequest。それはあなたにCompojureが持っているすべての情報を含む地図を与えるでしょう。それを調べて、後でルートに戻し、何が起こるかを観察することができます(たとえば、いくつかの変更を加えた後)。

于 2011-12-12T07:43:09.307 に答える
0

もしも

(my-preview-function request)

nilを返すと、ルーティングは次のルートを試行します。(ソースGET)を見て、それがルートとどのように一致するか(または一致しないか)を確認します。

于 2014-05-10T11:07:26.140 に答える