Clojure 如何在Ring Compojure应用程序上设置内容类型标头
我试图通过实现一个简单的web应用程序来开始使用Clojure和Clojurescript。到目前为止,一切都很顺利,在阅读不同的教程后,我得出了以下代码: core.clj:Clojure 如何在Ring Compojure应用程序上设置内容类型标头,clojure,http-headers,compojure,ring,Clojure,Http Headers,Compojure,Ring,我试图通过实现一个简单的web应用程序来开始使用Clojure和Clojurescript。到目前为止,一切都很顺利,在阅读不同的教程后,我得出了以下代码: core.clj: (ns myapp.core (:require [compojure.core :as compojure] [compojure.handler :as handler] [compojure.route :as route] [myapp.controll
(ns myapp.core
(:require [compojure.core :as compojure]
[compojure.handler :as handler]
[compojure.route :as route]
[myapp.controller :as controller]))
(compojure/defroutes app-routes
(compojure/GET "/" [] controller/index)
(route/resources "/public")
(route/not-found "Not Found"))
(def app
(handler/site app-routes))
controller.clj:
(ns myapp.controller
(:use ring.util.response)
(:require [myapp.models :as model]
[myapp.templates :as template]))
(defn index
"Index page handler"
[req]
(->> (template/home-page (model/get-things)) response))
templates.clj:
(ns myapp.templates
(:use net.cgrand.enlive-html)
(:require [myapp.models :as model]))
(deftemplate home-page "index.html" [things]
[:li] (clone-for [thing things] (do->
(set-attr 'data-id (:id thing))
(content (:name thing)))))
问题是我不能在页面上显示非ascii字符,我不知道如何在页面上设置HTTP头
我看到这样的解决方案,但我无法确定它们在我的代码中的位置:
(defn app [request]
{:status 200
:headers {"Content-Type" "text/plain"}
:body "Hello World"})
附言:欢迎对样式和/或代码组织提出任何建议。使用
ring.util.response
:
(require '[ring.util.response :as r])
然后在索引
功能上:
(defn index
"Index page handler"
[req]
(-> (r/response (->> (template/home-page (model/get-things)) response))
(r/header "Content-Type" "text/html; charset=utf-8")))
您可以在响应上链接其他操作,例如设置cookie和其他操作:
(defn index
"Index page handler"
[req]
(-> (r/response (->> (template/home-page (model/get-things)) response))
(r/header "Content-Type" "text/html; charset=utf-8")
(r/set-cookie "your-cookie-name"
"" {:max-age 1
:path "/"})))
谢谢你的回答。这很管用,但有一个小小的修正:在r/response.Works之后,我不得不删除双箭头宏。这真是个奇迹!谢谢你提供的细节!