Compojure는 더 이상 웹 응용 프로그램 개발을위한 완벽한 프레임 워크가 아닙니다. 0.4 릴리스 이후, compojure는 여러 프로젝트로 분리되었습니다.
링 은 HTTP 요청 및 응답 프로세스를 추상화하여 기초를 제공합니다. 링은 들어오는 요청을 구문 분석하고 요청의 모든 부분 (예 : uri, server-name 및 request-method)을 포함하는 맵을 생성합니다. 그런 다음 응용 프로그램은 요청을 처리하고 요청에 따라 응답을 생성합니다. 응답은 상태, 헤더 및 본문 키를 포함하는 맵으로 표시됩니다. 따라서 간단한 응용 프로그램은 다음과 같습니다.
(def app [req]
(if (= "/home" (:uri req))
{:status 200
:body "<h3>Welcome Home</h3>"}
{:status 200
:body "<a href='/home'>Go Home!</a>"}))
링의 또 다른 부분은 미들웨어의 개념입니다. 처리기와 수신 요청 및 / 또는 발신 응답 사이에있는 코드입니다. 내장 된 미들웨어에는 세션 및 스택 추적이 포함됩니다. 세션 미들웨어는 요청을하는 사용자에 대한 모든 세션 정보를 포함하는 : session 키를 요청 맵에 추가합니다. : session 키가 응답 맵에 있으면 현재 사용자가 다음에 요청한 내용에 대해 저장됩니다. 스택 추적 미들웨어는 요청을 처리하는 동안 발생하는 예외를 캡처하고 예외가 발생하면 응답으로 다시 전송되는 스택 추적을 생성합니다.
링으로 직접 작업하는 것은 번거로울 수 있으므로 Compojure 는 링 위에 세부 사항을 추상화하여 만들어졌습니다. 이제 응용 프로그램을 라우팅 측면에서 표현할 수 있으므로 다음과 같이 할 수 있습니다.
(defroutes my-routes
(GET "/" [] "<h1>Hello all!</h1>")
(GET "/user/:id" [id] (str "<h1>Hello " id "</h1>")))
Compojure는 여전히 요청 / 응답 맵을 사용하고 있으므로 필요한 경우 언제든지 액세스 할 수 있습니다.
(defroutes my-routes
(GET "*" {uri :uri}
{:staus 200 :body (str "The uri of the current page is: " uri)}))
이 경우 {uri : uri} 부분은 요청 맵의 : uri 키에 액세스하여 uri를 해당 값으로 설정합니다.
마지막 구성 요소는 Hiccup 이며 HTML을 더 쉽게 생성 할 수 있습니다. 다양한 html 태그는 벡터로 표시되며 첫 번째 요소는 태그 이름을 나타내고 나머지는 태그의 본문입니다. "<h2>A header</h2>"
됩니다 [:h2 "A Header"]
. 태그의 속성은 선택적 맵에 있습니다. "<a href='/login'>Log In Page</a>"
됩니다 [:a {:href "/login"} "Log In Page"]
. 다음은 템플릿을 사용하여 html을 생성하는 작은 예입니다.
(defn layout [title & body]
(html
[:head [:title title]]
[:body [:h1.header title] body]))
(defn say-hello [name]
(layout "Welcome Page" [:h3 (str "Hello " name)]))
(defn hiccup-routes
(GET "/user/:name" [name] (say-hello name)))
다음은 compojure의 저자가 현재 작성하고있는 일부 문서의 초안에 대한 링크입니다. Compojure Doc