在Clojure Web服务中查找匹配路径

在Clojure Web服务中查找匹配路径,clojure,compojure,ring,clout,Clojure,Compojure,Ring,Clout,我希望我能用一种有意义的方式来解释这一点 我正在使用Liberator对一些web服务进行原型化,我需要将这些web服务公开给客户端,并将路由定义如下: (defroutes fish (context "/fish" [] (ANY "/cod/:id/count" [id] (cod-fish id)))) (def handler (-> fish wra

我希望我能用一种有意义的方式来解释这一点

我正在使用Liberator对一些web服务进行原型化,我需要将这些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

我几乎可以肯定答案就在某个地方,但我似乎找不到它(

有什么建议吗

干杯


Peter

在这种情况下,我喜欢在调试语句中添加如下内容:

(let [response .... ]
    (log/errorf "in: request was: %s" 
       (with-out-str (clojure.pprint/pprint request))
 ....
并在输出中查找所需的数据(然后删除该语句)或者,如果您有一个工作正常且现代化的emacs+苹果酒环境,您可以使用C-uC-cC-C向函数添加调试,并通过这种方式捕获请求的值。如果您想要的数据不可用,则很可能在该输出中。如果您不使用日志框架,则删除日志,不使用str部分,直接调用pprint即可

抱歉,如果我有误解,或者可能是问题中的拼写错误:

(let [response handler]
      (println "out")
      response)
看起来它返回的是处理程序本身,而不是调用该处理程序的结果,应该是:

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

在这种情况下,我喜欢加入调试语句,如:

(let [response .... ]
    (log/errorf "in: request was: %s" 
       (with-out-str (clojure.pprint/pprint request))
 ....
并在输出中查找所需的数据(然后删除该语句)或者,如果您有一个工作正常且现代化的emacs+苹果酒环境,您可以使用C-uC-cC-C向函数添加调试,并通过这种方式捕获请求的值。如果您想要的数据不可用,则很可能在该输出中。如果您不使用日志框架,则删除日志,不使用str部分,直接调用pprint即可

抱歉,如果我有误解,或者可能是问题中的拼写错误:

(let [response handler]
      (println "out")
      response)
看起来它返回的是处理程序本身,而不是调用该处理程序的结果,应该是:

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

回答你的第二点;是的,它应该是对
处理程序
的调用,而不是对处理程序本身的调用-谢谢。回答你的第二点;是的,它应该是对
处理程序
的调用,而不是对处理程序本身的调用-谢谢。