gpt4 book ai didi

clojure - 如何在 Ring-Compojure 应用程序上设置 Content-Type header

转载 作者:行者123 更新时间:2023-12-04 13:50:37 24 4
gpt4 key购买 nike

我正在尝试通过实现一个简单的 Web 应用程序来开始使用 Clojure 和 Clojurescript。到目前为止,事情进展顺利,阅读了不同的教程,我想出了以下代码:

核心.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))

模板.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 header 。

我看到这样的解决方案,但我根本无法弄清楚将它们放在我的代码中的位置:
(defn app [request]
{:status 200
:headers {"Content-Type" "text/plain"}
:body "Hello World"})

P.S:欢迎任何有关样式和/或代码组织的建议。

最佳答案

使用 ring.util.response :

(require '[ring.util.response :as r])

然后在您的 index功能:
(defn index
"Index page handler"
[req]
(-> (r/response (->> (template/home-page (model/get-things)) response))
(r/header "Content-Type" "text/html; charset=utf-8")))

您可以在响应上链接其他操作,例如 set-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 "/"})))

关于clojure - 如何在 Ring-Compojure 应用程序上设置 Content-Type header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21834045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com