clojure - 我如何在 clojure 中使用环处理程序服务器静态 html 文件?
问题描述
我正在尝试通过基于环的 api 服务器路径来服务器 html。但是每次我到达终点时,我都会收到这个奇怪的错误
java.lang.IllegalArgumentException: No implementation of method: :write-body-to-stream of protocol: #'ring.core.protocols/StreamableResponseBody found for class: clojure.lang.PersistentArrayMap
at clojure.core$_cache_protocol_fn.invokeStatic(core_deftype.clj:583) ~[clojure-1.10.1.jar:?]
at clojure.core$_cache_protocol_fn.invoke(core_deftype.clj:575) ~[clojure-1.10.1.jar:?]
at ring.core.protocols$eval18503$fn__18504$G__18494__18513.invoke(protocols.clj:8) ~[?:?]
at ring.util.servlet$update_servlet_response.invokeStatic(servlet.clj:106) ~[?:?]
at ring.util.servlet$update_servlet_response.invoke(servlet.clj:91) ~[?:?]
at ring.util.servlet$update_servlet_response.invokeStatic(servlet.clj:95) ~[?:?]
at ring.util.servlet$update_servlet_response.invoke(servlet.clj:91) ~[?:?]
at ring.adapter.jetty$proxy_handler$fn__18623.invoke(jetty.clj:27) ~[?:?]
这是我的 api 返回的内容。
{:status 200
:body (resource-response "index.html" {:root "public"})}
而如果我直接点击 index.html 路径,则可以通过此路线访问
http://localhost:8080/index.html
解决方案
您收到错误No implementation of method: :write-body-to-stream of protocol: #'ring.core.protocols/StreamableResponseBody found for class: clojure.lang.PersistentArrayMap
是因为作为主体返回 PersistentArrayMap 而不是可以编码为 Ring HTTP 响应主体的内容。
resource-response
已经返回一个完整的响应映射(一个 PersistentArrayMap):
(resource-response "index.html")
;; => {:status 200,
;; :headers
;; {"Content-Length" "0", "Last-Modified" "Mon, 16 Nov 2020 14:22:48 GMT"},
;; :body
;; #object[java.io.File 0x239d3777 "/index.html"]}
因此无需将其包装起来,{:status 200, :body ...}
因为它会{:status 200 :body {:status 200, ...}}
导致该错误。要修复它,您的 API 可以直接返回:
(resource-response "index.html" {:root "public"})
推荐阅读
- ios - 在 C 中定义 Swift 协议所需的初始化程序
- java - Docker 构建不在 gitlab CI/CD 中运行
- excel - 使用 VBA 导入时,在超过 100,000 的数据集上消失的行
- ios - 标志的线程同步
- makefile - 自托管 gitlab CI:使用 CI_JOB_TOKEN 从 Makefile 中上传到包注册表
- powershell - 如何使用 PowerShell 在 Microsoft Word docx 文档的末尾添加内容?
- scheme - 方案的可变性
- python - Pytest 似乎无法识别并运行我的测试
- mobile-safari - Safari Mobile Web Inspector 不显示元素选项卡
- c# - 使用 XElement 访问 XML 数据不知何故不显示值 - 架构?