Я пытаюсь узнать о серверах, использующих Racket, и я нахожусь на пути к использованию статических активов. Из this answer, я был в состоянии включить статическую таблицу стилей, как так:Обслуживание статических файлов с использованием сервлетов 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
без правила доставки для каждого из них. Я попробовал совет Джей и изменил порядок диспетчера в определении serve/servlet
, переместив части htdocs и дополнительных файлов-путей (я, вероятно, не должен копировать все это здесь), и я нарушил способность разрешать типы MIME. В целом это был беспорядок.
Таким образом, любой из этих вопросов будут связаны/отношение к моей проблеме (от менее к более общим):
Есть ли лучший способ включить статические файлы с помощью инструментов на уровне
serve/servlet
?Может ли кто-нибудь конкретно очертить, как я мог бы переставить фигуры в
serve/servlet
, не нарушая ничего?Есть ли лучшее место, чем документы, чтобы узнать, как использовать серверные инструменты нижнего уровня в Racket? (Я довольно нового в этой специфической области так «узнать больше о серверах» может быть правильным ответом на этот вопрос)
Как выглядит соответствующее регулярное выражение? '#rx". * \. rkt "' кажется неправильным синтаксисом. 'read: неизвестная escape-последовательность \. in string' – Zelphir
Да, это классическая проблема с двойным выходом; Ракетка (и большинство других языков) интерпретирует обратную косую черту как символ побега. Поскольку вам действительно нужна обратная косая черта в вашем регулярном выражении, вам нужно записать ее как #rx ". * \\. Rkt". Это ... двойная обратная косая черта. Посмотрим, сохранится ли эта строка при переполнении стека. –