我有通常的 happstack 案例,其中我们有ServerPart Response
MonadPlus
列表和。然后msum
选择没有失败并且响应生成并返回的那个。
我认为应该在任何传入请求中完成一些操作——比如检查 cookie——准备连接上下文(授权经过身份验证的用户、实现计数等)——甚至还没有定义任何路径信息。
也许还有一些我还不知道的流行词,特别是针对这类员工。有人可以建议吗?
我有通常的 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
那将始终运行incCounter
并且checkUserAuth
. 然后它将尝试各种路线。
如果其中一条路由匹配,它将调用logResponse
,最后返回resp
将发送给用户的路由。
请注意,whileincCounter
和checkUserAuth
will 始终运行,logResponse
只有在其中一个部分匹配时才会运行。如果没有,那么我很确定代码会转义并返回 404。如果您想logResponse
始终运行,那么您可以向msum
始终匹配的处理程序添加一个处理程序。例如:
resp <- msum [ part1
, part2
, part3 mUser
, notFound $ toResponse "Sorry, page not found."
]
那几乎总是会运行。如果其中一个部分匹配,但明确调用“escape”,那么我很确定logResponse
仍然不会运行。也有处理这种情况的方法。
但是,简短的回答是,如果您希望某些事情发生在时间上,只需将其放在您的msum
代码之前。