0

我有一个产生两个值的 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

场景是中间件是一个 Auth 中间件,它将请求转发到另一个服务进行身份验证并取回用户值,这将在路由中需要。

4

0 回答 0