Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何在Ring Compojure应用程序上设置内容类型标头_Clojure_Http Headers_Compojure_Ring - Fatal编程技术网

Clojure 如何在Ring Compojure应用程序上设置内容类型标头

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

我试图通过实现一个简单的web应用程序来开始使用Clojure和Clojurescript。到目前为止,一切都很顺利,在阅读不同的教程后,我得出了以下代码:

core.clj:

(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之后,我不得不删除双箭头宏。这真是个奇迹!谢谢你提供的细节!