2014-04-01 123 views
3

我正在Clojure和Compojure上寫一個小型網站。我想根據找到或未找到的數據爲每個請求設置HTTP響應狀態。如何在Compojure中設置狀態碼?

最後一次調用是html5宏,該宏返回處理程序需要發送回瀏覽器的html。有沒有可能在這裏設置HTTP響應狀態?

(ns myapp.views.layout 
    (:require 
    [hiccup.page :refer (html5 include-css include-js)])) 

(defn layout [title & content] 
    (html5 
    (head title) 
    (body content))) 

回答

5

如果您只返回文本,文本將是響應的主體。如果您返回地圖,地圖可以描述響應的其他方面。

(defn layout [title & content] 
    {:status 200 
    :body (html5 (head title) (body content))}) 
3

如果返回一個包含

{:status NNN 
:body (my-code-here)} 

地圖則的內容:狀態的關鍵將是HTTP響應代碼。

3

我想補充一些細節,可能是有用的或有趣的人,每個路線的Compojure處理"... is treated intelligently"的返回值和智能封裝在"compojure.response/render multimethod"

基於對render代碼的粗略檢查,返回地圖的原因是您返回的地圖是merge -d,並且Compojure隱含地創建了the Ring response map

您可能還希望在映射中包含:headers {"Content-Type" "text/html"}(或其他適當的值)以處理您的處理程序返回值。我的響應中的頁面標題中的Unicode字符未正確呈現,因爲內容類型標題丟失。