在Clojure Web服务中查找匹配路径
我希望我能用一种有意义的方式来解释这一点 我正在使用Liberator对一些web服务进行原型化,我需要将这些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
(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)
回答你的第二点;是的,它应该是对
处理程序
的调用,而不是对处理程序本身的调用-谢谢。回答你的第二点;是的,它应该是对处理程序
的调用,而不是对处理程序本身的调用-谢谢。