12

現在、Network.Wai.Middleware.RequestLogger からミドルウェア logStdoutDev を実行していますが、パスと Accept ヘッダー (おそらく他のヘッダーも) のみをログに記録します。POST および PUT リクエストの本文も見たいです。この本体はたまたま json なので、標準出力に出力するだけで問題ありません。

すべてをログに記録する WAI ミドルウェアを探しましたが、何も見つかりませんでした。私は、POST 本体を抽出してそれを自分自身に戻すようなものを書くほど、WAI の内部構造について十分に知っているわけではないので、今はその学習曲線を避けたいと思っていました。

4

2 に答える 2

4

WAIMiddlewareは単なる変換Applicationです:

type Middleware = Application -> Application

そしてApplication単なるハンドラーです:

type Application = Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived

あなたがする必要があるのは、必要なものをログに記録し、「実際の作業」を下流に委任するハンドラーを定義することだけです。

-- note that this is equivalent to Application -> Application
logAllMiddleware :: Application -> Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived
logAllMiddleware app req respond = do
    print . unpack . requestBody req
    app req respond

ghc にアクセスせずにこのコードを書いたことを覚えておいてください。完全に正しくない場合があります。

于 2015-01-14T15:49:01.803 に答える