我有一个wai中间件,它产生两个值:
代码如下:
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中间件,它将请求转发到另一个服务进行身份验证,并取回路由中需要的用户值。