Clack

Revenge of Lisp in Web

Chapter 8: Clack.Middleware.Staticを使う

English | 日本語

Clackは以下の有用なミドルウェアを提供しています。

さらにClack.Middleware.CsrfというCSRF攻撃を防ぐミドルウェアもContribパッケージとして提供されています。

この章では

  • Clack.Middleware.Staticを例として紹介します。これは与えられたリクエストが指定のパターンにマッチしたときにファイルを配信するミドルウェアです。

    以下は使い方の例です。このラップされたアプリケーションはほとんどのリクエストに対して"Hello, Clack!"と返しますが、リクエストパスが"/public/*"にマッチするときのみ"/path/to/static-files/"の中のファイルを返します。

    (import '(clack:wrap
              clack.middleware.static:<clack-middleware-static>))
    
    (defun app (env)
      '(200
        (:content-type "text/plain")
        ("Hello, Clack!")))
    
    (defvar mw
        (make-instance '<clack-middleware-static>
           :path "/public/"
           :root #p"/path/to/static-files/"))
    
    (clack:clackup
      (wrap mw #'app))
    

    ミドルウェアは、ラップした新しいアプリケーションを返すメソッドwrapを持ちます。アプリケーションは複数のミドルウェアでラップすることもできます。それにはwrapを以下のように複数回呼び出します。

    (clack:clackup
      (wrap mw3
        (wrap mw2
          (wrap mw1 #'app))))
    

    しかしながら、これらの入れ子になったwrapは長ったらしいです。ClackはこれをDSL風の文法で書く方法を用意しています。それについては次の章で言及することにします。