首页 > 解决方案 > Haskell wai 中间件 - 如果从第一个应用程序返回 404,如何运行应用程序?

问题描述

我正在尝试将两个 waiApplication一起“加入”。本质上,第一个应用程序将提供404 Not found 响应或不是404 Not found 响应的响应。我想添加第二个应用程序,如果第一种情况(第一个应用程序返回404)存在,它将尝试处理请求。

但是查看类型Application

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

不清楚如何检查响应?我不会只是ResponseRecived以最终结果结束 - 它似乎不包含任何响应代码。如下图所示:

xyzMiddle :: (Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived) ->
             (Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived)
xyzMiddle app req respond = do
  zzz <- (app req respond)
  pure zzz

我怎么能实现这个?或者,我在上面没有理解什么?

标签: haskellhaskell-wai

解决方案


我忽略了这一点(Response -> IO ResponseReceived),因为这是在IO上下文中 - 这是我们可以运行第二个应用程序的地方。这意味着,要检查Response我们可以执行以下操作:

xyzMiddle :: (Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived) ->
             Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived
xyzMiddle app req respond = app req (\r -> do
  print $ show $ responseStatus r
  respond r)

推荐阅读