我正在学习使用Racket进行服务器开发,但是在尝试使用静态资源时遇到了困难。根据这个答案,我成功地包含了一个静态样式表:
#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中的低级服务器工具?(我在这个特定领域还很新,因此“了解更多关于服务器”的回答可能是有效的)
#rx".*\.rkt"
看起来语法有误。报错信息为:read: unknown escape sequence \. in string
。 - Zelphir Kaltstahl