すべての要求に対して特定のアクションを実行する場合は、ルーティング コードの前に do ステートメントに追加できます。例えば:
module Main where
import Happstack.Server
main = simpleHTTP nullConf $ do incCounter
mUser <- checkUserAuth
resp <- msum [ part1
, part2
, part3 mUser
]
logResponse resp
return resp
それは常に実行さincCounterれ、checkUserAuth. その後、さまざまなルートを試します。
いずれかのルートが一致すると、 が呼び出さlogResponseれ、最後に が返さrespれ、ユーザーに送信されます。
whileincCounterとcheckUserAuthwill は常に実行さlogResponseれ、いずれかの部分が一致する場合にのみ実行されることに注意してください。何も実行しない場合、コードがエスケープして 404 を返すと確信しています。常に実行したい場合は、常に一致logResponseするハンドラーを に追加できます。msum例えば:
resp <- msum [ part1
, part2
, part3 mUser
, notFound $ toResponse "Sorry, page not found."
]
それはほとんど常に実行されます。部分の 1 つが一致するが、明示的に「エスケープ」を呼び出す場合、logResponseまだ実行されないことは確かです。対処方法もあります。
しかし、簡単に言えば、何かをすぐに実行したい場合は、msumコードの前に置くだけです。