Clojure 在Compojure中提供静态favicon文件
根据: 默认情况下,Compojure不提供静态文件,也不提供静态文件 当没有路线匹配时,自动处理404 所以为了解决这个问题,我们必须设置这些Clojure 在Compojure中提供静态favicon文件,clojure,compojure,Clojure,Compojure,根据: 默认情况下,Compojure不提供静态文件,也不提供静态文件 当没有路线匹配时,自动处理404 所以为了解决这个问题,我们必须设置这些 档案 找不到 资源 这就是我们目前的设置方式: (defroutes app-routes (route/files "/" {:root "path/to/public"}) (route/resources "/") (route/not-found "Not Found")) 当大多数静态文件都是通过web浏览器访问时,它就如预
- 档案
- 找不到
- 资源
(defroutes app-routes
(route/files "/" {:root "path/to/public"})
(route/resources "/")
(route/not-found "Not Found"))
当大多数静态文件都是通过web浏览器访问时,它就如预期的那样工作了
e、 g
但问题是,它对favicon文件不起作用。
e、 g
它将此视为一个不同的调用,它应该作为一个静态文件
对我运行的CURL的响应:
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 3000 (#0)
> GET /img/favicon.ico HTTP/1.1
> User-Agent: curl/7.38.0
> Host: localhost:3000
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Tue, 28 Jul 2015 19:05:24 GMT
< Last-Modified: Thu, 28 May 2015 14:51:16 +0000
< Content-Length: 1106
< Content-Type: image/x-icon
* Server Jetty(7.6.13.v20130916) is not blacklisted
< Server: Jetty(7.6.13.v20130916)
在DNS缓存中找不到主机名
*正在尝试127.0.0.1。。。
*已连接到本地主机(127.0.0.1)端口3000(#0)
>GET/img/favicon.ico HTTP/1.1
>用户代理:curl/7.38.0
>主机:localhost:3000
>接受:*/*
>
文件
、资源
和未找到
是函数,而不是您设置的变量。当您调用(route/files”/“{:root”path/to/public”})
时,将返回将“/”下的URL解析为“path/to/public”下的静态文件的路由
defroutes
定义路由集合。这些路由将按照它们列出的顺序进行尝试,直到第一个返回响应为止
如果您在其他路由之前添加一个路由(GET“/:slug”[*:as req slug](search req slug))
,则“/”以外的任何URL都将由该新路由处理,包括favicon请求。另一方面,如果您在未找到
路由之前添加它,那么它应该可以工作
此外,如果没有与请求匹配的静态文件,则文件
路由将失败,并将尝试下一个路由。因此,您还应该检查favicon.ico
是否确实存在,是否在img
子目录中。嗯
这适用于我(无论您在何处定义/声明路线):
在名称空间部分:
[ring.util.response :refer [resource-response]]
低于(至少高于)(def应用程序):
然后在:
(def app
(-> routes
...
wrap-return-favicon
wrap-stacktrace))
将响应粘贴到
curl-vvvhttp://localhost:3000/img/favicon.ico
please@JamesSharp我已经发布了回复。看起来还可以…为什么你说它不工作?如果你用浏览器进行测试,它的缓存可能会出错,但它与compojure无关。有一个它加载favicon,但当我说它不工作时,我会ean的compojure
“我相信”并没有将其作为静态文件使用,而是将其视为路由之一
。因此,它似乎属于以下路由:(GET”/:slug“[*:as req slug](search req slug))
感谢您澄清这一点。奇怪的是,它确实存在于img
目录中,但仍由/:slug
路由处理,而同一目录中的图像则不存在。
(def app
(-> routes
...
wrap-return-favicon
wrap-stacktrace))