Racket 编程

3 部分 · 应用开发实战

路由与模板

路由与模板

实现 URL 路由分发,使用模板引擎渲染动态页面。

路由分发

使用 dispatch-rules 建立清晰的 URL 到处理器的映射:

#lang racket

(require web-server/servlet
         web-server/servlet-env
         web-server/dispatch)

(define (home req)
  (response/xexpr
   `(html (head (title "首页"))
          (body (h1 "欢迎")))))

(define (user-page req username)
  (response/xexpr
   `(html (body (h1 ,(format "用户: ~a" username))))))

(define-values (dispatch url)
  (dispatch-rules
   [("about")        about-page]
   [("user" (string-arg)) user-page]
   [else             home]))

模板渲染

使用 Racket 的准引用在代码中嵌入 HTML:

(define (render-page title content)
  (response/xexpr
   `(html
     (head
      (title ,title)
      (link ([rel "stylesheet"] [href "/style.css"])))
     (body
      (header (h1 ,title))
      (main ,@content)
      (footer (p "Powered by Racket"))))))

静态文件

(require web-server/dispatchers/dispatch-static)

(serve/servlet dispatch
               #:port 8080
               #:servlet-regexp #rx""
               #:extra-files-paths (list "static"))

小结

良好的路由设计和模板渲染是 Web 应用的基础。Racket 的准引用让模板非常灵活。