Happstack中间件缺乏



我有通常的 happstack 案例,其中我们在列表中ServerPart Response MonadPlus。然后msum选择不会失败并生成并返回响应的那个。

我认为某些操作 - 例如检查cookie - 准备连接上下文(授权经过身份验证的用户,实现计数等)应该在任何传入请求中完成 - 甚至尚未定义任何路径信息。

也许有一些我还不知道的流行词,特别是针对这类员工。有人可以建议吗?

如果要

对每个请求执行某些操作,可以在路由代码之前的 do 语句中添加这些操作。例如:

module Main where
import Happstack.Server
main = simpleHTTP nullConf $ do incCounter
                                mUser <- checkUserAuth
                                resp <- msum [ part1
                                             , part2
                                             , part3 mUser
                                             ]
                                logResponse resp
                                return resp

这将永远运行incCountercheckUserAuth.然后它将尝试各种路线。

如果其中一个路由匹配,它将调用logResponse,然后最终返回将发送给用户的resp

请注意,虽然 incCountercheckUserAuth 将始终运行,但仅当其中一个部分匹配时,才会运行logResponse。如果没有,那么我很确定代码会转义并返回 404。如果希望logResponse始终运行,则可以向始终匹配的msum添加处理程序。例如:

                 resp <- msum [ part1
                              , part2
                              , part3 mUser
                              , notFound $ toResponse "Sorry, page not found."
                              ]

这几乎总是会运行。如果其中一个部分匹配,但明确调用"escape",那么我很确定logResponse仍然不会运行。也有处理这个问题的方法。

但是,简短的回答是,如果您希望某些事情在时间范围内发生,只需将其放在msum代码之前即可。

相关内容

  • 没有找到相关文章

最新更新