我正在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)))
答案 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字符未正确呈现。