1

分かりやすく説明できると思います!

Liberator を使用して、クライアントに公開する必要があるいくつかの Web サービスのプロトタイプを作成し、ルートを次のように定義しています。

(defroutes fish
  (context "/fish"
           []
           (ANY "/cod/:id/count"
                [id]
                (cod-fish id))))

(def handler
  (-> fish
      wrap-params
      path-wrapper))

の意図はpath-wrapper、一致したパスに関する情報を出力することです。現在、次のようになっています。

(defn path-wrapper
  [handler]
  (fn [request]
    (println "in" (:request-method request) (:uri request))
    (let [response (handler request)]
      (println "out")
      response)))

これはあなたが期待するものを出力します:

in :get /fish/cod/123/count
out

ただし、印刷したいのは次のとおりです。

in :get /fish/cod/:id/count
out

つまり、一致した URI ではなく、一致したパスです。

答えはCloutのどこかにあるとほぼ確信していますが、見つけられないようです! :(

何かアドバイス?

乾杯、

ピーター

4

1 に答える 1

0

このような場合、次のようなデバッグ ステートメントを入れるのが好きです。

(let [response .... ]
    (log/errorf "in: request was: %s" 
       (with-out-str (clojure.pprint/pprint request))
 ....

出力で必要なデータを探します(その後、ステートメントを削除します)。または、最新のemacs + cider環境が機能している場合は、関数にデバッグを追加して、C-uC-cC-cその方法でリクエストの値をキャッチできます。必要のないデータが利用可能な場合、その出力に含まれる可能性があります。ロギング フレームワークを使用していない場合は、ログと with-out-str の部分を削除して、pprint を直接呼び出します。

私が誤解している場合、またはおそらく質問のタイプミスである場合は申し訳ありません:

(let [response handler]
      (println "out")
      response)

そのハンドラーを呼び出した結果ではなく、ハンドラー自体を返しているように見えます。

(let [response (handler request)]
      (println "out")
       response)  
于 2015-09-17T22:41:23.967 に答える