我是Clojure的新手,并尝试设置一些简单的网络路线。我希望路由在开发中重新加载所有相关代码,但不在生产中。
我只能使用var的路由而不是实际的符号来使用它。如果我做错了,有人可以解释一下吗?如果没有,为什么需要var?
(def app-handler
(let [formats [:json-kw :edn :yaml-kw :yaml-in-html :transit-json :transit-msgpack]
wrapped-api (wrap-restful-format #'routes/api-routes :formats formats)
combined-routes (compojure.core/routes wrapped-api #'routes/html-routes)
with-defaults (wrap-defaults combined-routes api-defaults)]
(if (is-dev?)
; Development
(wrap-reload with-defaults)
; Production
with-defaults)))
(请注意上面的#'routes/api-routes
和#'routes/html-routes
)。
答案 0 :(得分:1)
以更详细描述的方式in another answer,服务器在传入路由函数时最终捕获它们,如果提供var,这将确保服务器使用任何更新的定义。
这被认为是在开发过程中提供路由或处理程序功能的常用方法,因此您无需重新启动Web服务器进程即可查看更新的定义。