1

因此,我是clojure n00b,並且在嘗試獲取我正在構建的項目的路由時錯過了某些內容。無法在webnoir中使用defroutes

我有循環依賴的一些問題,並與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'ing,和我我甚至不知道該從哪裏出發。我能夠使用defpage這個網站,但它看起來很醜並且不能隨着路線數量的增長而擴展。

所以

  • 我在做什麼錯在這裏?任何洞察基礎compojure/clojure/ring圖層將是非常棒的
  • 如果這不是定義路線的最佳方式,那是什麼?
  • github上有很多大型clj-noir站點的例子嗎? (我的谷歌福失敗了我。)

回答

1

在比諾你可以把你所有defpage在同一個命名空間,一個接一個,如果你想擁有他們都在同一個地方。它們可以作爲委託給其他功能做了「真正」的工作,你所定義的(GET「/」 ...)在你的榜樣路線一樣簡單。

我在做什麼錯在這裏?任何洞察潛在的Compojure/Clojure的/環層將是真棒

不知道你在做什麼錯了,你的代碼對我的作品有一對夫婦最小程度的改變:只有加入

核心ring.adapter.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}) 

您的路由文件,沒有「視圖」。常見的」命名空間:

(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 [email protected]> 

而且wgetting根:

wget http://localhost:8080/ -O - -q 
the root path 
+0

感謝您的徹底迴應。我打算做的是在views/common命名空間中調用一個函數(爲簡潔起見,我省略了它)。我將用添加的碼頭代碼進行運行並報告。 – KyleWpppd

+0

好的,所以我試圖讓它工作,說實話,我不知道我做錯了什麼。 Defroutes似乎有效,但我會重新啓動lein,而不會。這意味着我有一些編譯問題。 最終工作是什麼只是把所有的defpages放在路由文件中,然後使用'load-views-ns'來獲取加載的路由文件。這可能是一個拙劣的解決方案,但它的工作,我厭倦了擺弄。 我打算接受這個答案,因爲它讓我足夠接近以解決問題。 – KyleWpppd

1

也許你會發現此頁面有用Global Noir Routes(實施defpage宏變種,它允許在一個地方確定的路線)。

+0

在我的google搜索,我發現這篇博文,但是以我的非clojure角度來看tive,它似乎並不特別優雅。看起來它會起作用。 – KyleWpppd