Clack

Revenge of Lisp in Web

Chapter 9: Clack.Builder

English | 日本語

この章では、Clackミドルウェアを利用する上で最も一般的な使い方、「Clack.Builder」について話します。Clack.Builderはミドルウェアのwrapを順番に呼び、1つの関数(つまりアプリケーション)に組み上げます。

書き方は簡単です。

(builder
  ;; ここにミドルウェアを記述
  #'app)
;=> 関数 (アプリケーション)

そして以下が実際のサンプルコードです。

(import 'clack.builder:builder)

(defun app (env)
  (declare (ignore env))
  '(200
    (:content-type "text/plain")
    ("Hello, Clack!")))

(clack:clackup
  (builder
    <clack-middleware-session>
    (<clack-middleware-static>
      :path "/public/"
      :root #p"/path/to/static-files/")
    #'app))

<clack-middleware-session>はセッションを有効にするミドルウェアです。これを使うと、envの中に:clack.sessionというキーが追加され、セッションをハッシュテーブルとして扱うことができるようになります (Clack.Middleware.Sessionを参照)。

builderwrap下から上に呼び出すことに注意してください。この例では、#'appはまず<clack-middleware-static>に包まれ、次に<clack-middleware-session>に包まれます。

第7章で出てきた図を思い出してください。

この図の場合、外側のミドルウェアが<clack-middleware-session>で、内側が<clack-middleware-static>です。