1

だから、私はclojure n00bであり、私が構築しているプロジェクトのルートを取得しようとすると、何かが足りません。

循環依存関係にいくつか問題がありました。Djangoを使用した後は、で行われているようにコードベース全体にペッパーを付けるよりも、ルートをすべて1か所で定義する方がはるかに良いと思います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、ルート数が増えるにつれ、醜くて拡張性がなくなったようです。

それで

  • 私はここで何が間違っているのですか?基盤となるcompojure/clojure/ringレイヤーへの洞察は素晴らしいでしょう
  • これがルートを定義する最良の方法ではない場合、何ですか?
  • githubに大きなclj-noirサイトの良い例はありますか?(私のgoogle-fuは私に失敗しました。)
4

2 に答える 2

1

このページは、グローバルノワールルートdefpage( 1か所でルートを定義できるマクロバリアントの実装)に役立つかもしれません。

于 2012-09-03T08:07:08.337 に答える
1

Noirでは、すべてのdefpageを同じ名前空間に、すべて同じ場所に配置したい場合は、次々に配置できます。これらは、例で(GET "/" ...)ルートを定義したのと同じように、「実際の」作業を行うために他の関数に委任するのと同じくらい簡単にすることができます。

私はここで何が間違っているのですか?基盤となるcompojure/clojure/ringレイヤーへの洞察は素晴らしいでしょう

何が間違っているのかわからないので、コードはいくつかの最小限の変更で機能します。

ファイルのロード時にjettyサーバーを起動するために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})

「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
于 2012-09-04T00:27:30.633 に答える