[racket] How to fit web-server/dispatchers/dispatch-files into dispatch-rules?

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Thu Jan 24 09:19:11 EST 2013

On Wed, Jan 23, 2013 at 9:29 PM, Limbo Peng <iwinux at gmail.com> wrote:
> Hi all,
>
> As the Racket Web Server doc shows, we can define URL dispatching rules as follows:
>
>   (define-values (blog-dispatch blog-url)
>       (dispatch-rules
>        [("") list-posts]
>        [("posts" (string-arg)) review-post]
>        [("archive" (integer-arg) (integer-arg)) review-archive]
>        [else list-posts]))
>
> If I want to make "blog-dispatch" as the only one dispatcher, I can do this:
>
>   (serve/servlet blog-dispatch #:servlet-regexp #rx".*")
>
> Here's the problem - it captures all requests, including requests to static files,
> which is not what I want - I'd expect that it treats requests that don't match
> any rules as a request to a static file in the htdocs/ directory.

I'm not sure why this is a "problem", you wrote in your dispatch an
"else" clause that says "All other URLs get passed to list-posts". Why
would you expect anything differently? If you remove this 'else'
clause, then it will do what you expect, because serve/servlet puts a
file server after the servlet server in the dispatch chain. Is there a
reason you can't or don't want to do that?

Jay

> I've found the module "web-server/dispatchers/dispatch-files" that can serve static files,
> but the "make" procedure in it returns a dispatcher, which cannot be passed to "dispatch-rules"
> directly. How can I "convert" it to a normal request handler?
>
> -Limbo Peng
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users



--
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://faculty.cs.byu.edu/~jay

"The glory of God is Intelligence" - D&C 93

Posted on the users mailing list.