重新加载Clojure代码/路由 - 使用符号与var的问题

时间:2015-04-14 17:50:43

标签: clojure reload compojure

我是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)。

1 个答案:

答案 0 :(得分:1)

以更详细描述的方式in another answer,服务器在传入路由函数时最终捕获它们,如果提供var,这将确保服务器使用任何更新的定义。

这被认为是在开发过程中提供路由或处理程序功能的常用方法,因此您无需重新启动Web服务器进程即可查看更新的定义。