所以,我是一个clojure n00b,在尝试获取我正在建设的项目的路线时,我遗漏了一些东西。
我遇到了循环依赖的一些问题,在使用Django之后,我认为将路由全部定义在一个地方要好得多,而不是像defpage
那样在整个代码库中填充。
代码:
这是我的core.clj
文件:
(ns blktechies-home.core
(:use compojure.core
hiccup.middleware)
(:require [compojure.route :as route]
[blktechies-home.routes :as site-routes]
[compojure.handler :as handler]
[compojure.response :as response]))
(def app
(-> (handler/site site-routes/app)
(wrap-base-url)))
然后在我的路线文件中,我有以下内容:
(ns blktechies-home.routes
(:use compojure.core
noir.core
hiccup.middleware)
(:require [compojure.route :as route]
[compojure.handler :as handler]
[compojure.response :as response]
[blktechies-home.views.common :as common]))
(defroutes app
(GET "/" [] (common/main-layout
(welcome/index-page)))
(route/resources "/")
(route/not-found "<h1>NOPE</h1>"))
一切都是404',我甚至不确定从哪里开始。我能够将该网站与defpage
一起使用,但随着路线数量的增加,它看起来很丑陋而且无法扩展。
所以
答案 0 :(得分:1)
也许您会发现此页面有用Global Noir Routes(允许在一个位置定义路由的defpage
宏变体的实现。)
答案 1 :(得分:1)
在Noir中,如果你想将它们全部放在同一个地方,你可以将所有的defpage放在同一个命名空间中。它们可以像委托其他函数一样简单地完成“实际”工作,就像您在示例中定义(GET“/”...)路径一样。
我在这里做错了什么?对底层compojure / clojure / ring层的任何了解都很棒
不确定你做错了什么,你的代码对我来说只有一些微小的变化:
在加载文件时添加ring.adapter.jetty以启动jetty服务器的核心:
(ns blktechies-home.core
(:use compojure.core
hiccup.middleware
[ring.adapter.jetty :only [run-jetty]])
(:require [compojure.route :as route]
[blktechies-home.routes :as site-routes]
[compojure.handler :as handler]
[compojure.response :as response]))
(def app
(-> (handler/site site-routes/app)
(wrap-base-url)))
(run-jetty app {:port 8080 :join? false})
您的路线文件,没有“views.common”命名空间:
(ns blktechies-home.routes
(:use compojure.core
noir.core
hiccup.middleware)
(:require [compojure.route :as route]
[compojure.handler :as handler]
[compojure.response :as response]))
(defroutes app
(GET "/" [] "the root path")
(route/resources "/")
(route/not-found "<h1>NOPE</h1>"))
现在开始repl:
lein repl
加载核心:
user=> (load-file "src/blktechies_home/core.clj")
#<Server Server@9ae1ab>
然后忘记根:
wget http://localhost:8080/ -O - -q
the root path