# Methods for breaking up web-server files

**URL:** <https://racket.discourse.group/t/methods-for-breaking-up-web-server-files/2578>\
**Category:** Questions & Answers\
**Tags:** web-server\
**Created:** [December 8, 2023, 1:34am UTC](https://racket.discourse.group/t/methods-for-breaking-up-web-server-files/2578 "2023-12-08T01:34:20Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![thrilway](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/thrilway/32/1398_2.png) [@thrilway](https://racket.discourse.group/u/thrilway)\
**Post date:** [December 8, 2023, 1:34am UTC](https://racket.discourse.group/t/methods-for-breaking-up-web-server-files/2578/1 "2023-12-08T01:34:20Z")

</div>

While writing a web-app, I've found my server.rkt file getting a bit unwieldy so I'm trying to break it up some. My first attempt was to put all the rendering functions in to a file separate from the file with the dispatch-rules and handler functions. So I went from a file like this:

`server.rkt`

```racket
#lang racket
(require web-server/dispatch "model.rkt" ...)

(define-values (dispatch url-generator)
 (dispatch-rules
    (("") welcome)
    (...) ...))

(define (welcome req)
 ...
 (render-welcome-page req ...))

...

(define (render-welcome-page req ...)
   (response/xexpr
       `(html ...
           (body
              (a ((href ,(url-generator login))) "Login") 
              ...))))

(serve/servlet dispatch ...)

```

to a pair of files like this  
`server.rkt`

```racket
#lang racket
(require web-server/dispatch "model.rkt" "view.rkt" ...)

(define-values (dispatch url-generator)
 (dispatch-rules
    (("") welcome)
    (...) ...))

(define (welcome req)
 ...
 (render-welcome-page req ...))
...
(serve/servlet dispatch ...)

```

`view.rkt`

```racket
#lang racket
(require web-server/dispatch "model.rkt" ...)
(define (render-welcome-page req ...)
    (response/xexpr
        `(html ...
            (body
               (a ((href ,(url-generator login))) "Login") 
               ...))))
...

```

I immediately realized that `view.rkt` needed to have `url-generator`, so I tried redefining my renderers to take it as an argument, but then I realized `(url-generator login)` needs `login` to be defined in its scope.

Assuming I want my renderers to be able to dynamically generate urls, and assuming I want to use url-based dispatching, is there any way to split up my server file in the manner I attempted?
