Clackは以下の有用なミドルウェアを提供しています。
- Clack.Middleware.Static - 静的ファイルの配信。
- Clack.Middleware.Logger - アプリケーションやミドルウェア内のログ機構。
- Clack.Middleware.Session - セッション管理。
- Clack.Middleware.Conditional - ミドルウェア用の条件分岐。
- Clack.Middleware.Auth.Basic - ベーシック認証。
さらにClack.Middleware.CsrfというCSRF攻撃を防ぐミドルウェアもContribパッケージとして提供されています。
この章では
以下は使い方の例です。このラップされたアプリケーションはほとんどのリクエストに対して"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風の文法で書く方法を用意しています。それについては次の章で言及することにします。