如何在Compojure中设置状态代码?

时间:2014-04-01 22:17:16

标签: clojure compojure

我正在Clojure和Compojure写一个小网站。我想根据找到或未找到的数据为每个请求设置HTTP响应状态。

最后一个调用是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)))

3 个答案:

答案 0 :(得分:5)

如果只返回文本,那么文本将成为响应的主体。如果您返回地图,地图可以描述响应的其他方面。

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

答案 1 :(得分:3)

如果您返回包含

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

然后:status键的内容将是http响应代码。

答案 2 :(得分:3)

只是为了向其他人添加一些可能有用或有趣的细节,您的Compojure路由处理程序"... is treated intelligently"的每个返回值以及该智能都封装在"compojure.response/render multimethod"中。

根据对render代码的粗略检查,返回地图的原因是您返回的地图是merge - d,其中the Ring response map是Compojure隐式创建的。< / p>

您可能还希望在地图中包含:headers {"Content-Type" "text/html"}(或其他适当的)处理程序返回值。由于内容类型标题丢失,我的回复中页面标题中的Unicode字符未正确呈现。