我正在尝试使用Racket了解服务器,并且我开始尝试使用静态资产了。从this answer开始,我能够包含一个静态样式表,如下所示:
#lang racket
(require web-server/servlet
web-server/servlet-env
web-server/configuration/responders)
(define (home req)
(response/xexpr
'(html
(head (link ([rel "stylesheet"] [type "text/css"] [href "/style.css"])))
(body
(span ([class "emph"]) "Hello, world!")))))
(define-values (dispatch input-url)
(dispatch-rules
[("home") home]
[("style.css") (λ (_) (file-response 200 #"OK" "style.css"))]))
(serve/servlet dispatch
#:servlet-regexp #rx""
#:servlet-path "/home"
#:server-root-path (current-directory))
但是,我仍然对如何执行此操作感到困惑,即为#:extra-files-paths
中的所有文件提供服务而不为每个文件制定调度规则。我尝试了Jay的建议并通过移动htdocs和extra-files-paths部分来更改serve/servlet
定义中的调度程序顺序(我可能不应该在这里复制整个内容)并且我破坏了解析MIME的能力不知何故的类型。总的来说这是一团糟。
因此,任何这些问题都与我的问题相关/相关(从少到一般):
是否有更好的方法可以使用serve/servlet
级别的工具来包含静态文件?
任何人都可以详细说明如何在不破坏事物的情况下重新安排serve/servlet
中的各个部分吗?
是否有比文档更好的地方了解如何在Racket中使用较低级别的服务器工具? (我在这个特定领域很新,所以“了解更多关于服务器”可能是对这个问题的有效回应)
答案 0 :(得分:1)
在我看来问题就是你的#:servlet-regexp,它被设置为空的正则表达式,这意味着它将匹配任何东西。一个简单的解决方案是限制此正则表达式,使其仅匹配非静态资产;然后,所有其他请求应该从#:extra-files-paths。
提供或许还有一些原因需要拦截所有请求并在代码中处理它们?不确定。