0

2 つの値を生成する wai ミドルウェアがあります。

  1. リクエストごとにランダムに生成されるリクエスト ID
  2. リクエストから別のサービスへのユーザー。

コードは次のとおりです。

addRequestIdToRequestHeader' :: Application -> Application
addRequestIdToRequestHeader' app req respond = do
  rid <- nextRequestId :: IO ByteString
  user <- fetchUserByReq req :: IO User
  req' <- attachUserAndRequestIdToRequest user rid
  app req' respond

これでルートができましたGET /user。このルート内で、リクエスト ID とユーザーにアクセスしたいと思います。例として、それらをログに出力するだけです。

main :: IO ()
main =
  scotty 8080 $ do
    get "/user" $ do
      req <- request
      rid <- liftAndCatchIO $ getRequestIdFromRequest req
      user <- liftAndCatchIO $ getUserFromRequest req
      liftAndCatchIO $ print rid
      liftAndCatchIO $ print user
      text $ username user

問題は、リクエスト ID とユーザーがミドルウェアから生成されるため、ルートからそれらにアクセスする方法です。基本的に、上記のコードで使用される次の関数を実装する方法:

attachUserAndRequestIdToRequest :: User -> ByteString -> Request -> IO Request

getRequestIdFromRequest :: Request -> IO ByteString

getUserFromRequest :: Request -> IO User

シナリオは、ミドルウェアが認証ミドルウェアであり、認証のためにリクエストを別のサービスに転送し、ルートで必要になるユーザー値を取得することです。

4

0 に答える 0