私はRacketを使用しているサーバーについて学習しようとしています。静的資産を使用しようとしているのです。しかし、私はつまり、それぞれのディスパッチルールをせずに#:extra-files-paths
内のすべてのファイルを提供し、一般的にこれを行う方法のようまだ混乱している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))
:this answerから、私はそうのような静的なスタイルシートを含めることができましたそのうちの。私はJayのアドバイスを試して、serve/servlet
のhtdocsとextra-files-pathsの部分を上に移動してディスパッチャの順序を変更しました(私はおそらくそのすべてをここにコピーすべきではないでしょう)。全体的には混乱でした。
は、したがって、これらの質問のいずれかが(以下に、より一般的なものから)私の問題へ/関連関連することになります。
serve/servlet
のレベルでのツールを使用して、静的ファイルをインクルードするより良い方法はありますか?どのように私は
serve/servlet
の部分をどのように再編成するかもしれないかを具体的に説明できますか?ラケットの下位レベルのサーバーツールを使用する方法については、ドキュメントよりも優れた場所がありますか?サーブレット・正規表現、である:それは問題のように私には見えます
正規表現はどのようなものでしょうか? '#rx"。* \。rkt "'は間違った構文であるようです。 'read:未知のエスケープシーケンス\。文字列 ' – Zelphir
はい、これは古典的なダブルエスケープの問題です。ラケット(および他のほとんどの言語)はバックスラッシュをエスケープ文字として解釈します。実際に正規表現にバックスラッシュが必要なので、#rx "。* \\。rkt"と書く必要があります。それはバックスラッシュを2倍にしたものです。その文字列がスタックオーバーフロー処理を引き継ぐかどうかを見てみましょう。 –