2017-08-02 3 views
0

リモートサーバーに500のエラーを送信するミドルウェアを作成しようとしています。エラー情報は応答本体にあります。WAIミドルウェアでレスポンスボディを読み取る方法は?

Responseからどのような種類の文字列として応答本文を取得できますか?私はresponseToStreamを参照してくださいが、私はそれを使用する方法を把握することはできません。

import Network.Wai 
import Data.ByteString.Lazy (ByteString) 

responseBody :: Response -> IO ByteString 
responseBody res = _ 
+1

import Data.IORef (newIORef,modifyIORef',readIORef) import Data.Monoid ((<>)) import Data.ByteString.Lazy (ByteString) import Data.ByteString.Builder (toLazyByteString) import Network.Wai responseBody :: Response -> IO ByteString responseBody res = let (status,headers,body) = responseToStream res in body $ \f -> do content <- newIORef mempty f (\chunk -> modifyIORef' content (<> chunk)) (return()) toLazyByteString <$> readIORef content 
responseToStream' 'の結果は、3つ組です。私はあなたがあなたが3番目のコンポーネントに興味があり、最初の2つではないことを意味していることを意味しています(すなわち、抽象的な抽象クラスではないので、直接フィールドにアクセスできます)。 3つ目のコンパイルでは、おそらく 'Builder - > IO()'のために 'IORef'(または並行設定の' MVar')にそれぞれの 'Builder 'を' mappend'する関数を渡すことができます - 別のデータのチャンクを送信する手段を提供します」(ここでは「送信」はメモリに保存しています)。 – user2407038

答えて

0

user2407038 @によるコメントの実装:

関連する問題