标题总结了它。我想在snap中为我的所有响应添加标题。 我可以为我的每个路由添加一个modifyRequest处理程序,如:
apiRoutes :: [(ByteString, Handler b Api ())]
apiRoutes = [("status", addHeader)]
addHeader :: Handler b Api ()
addHeader = do
modifyResponse (setHeader "Content-Type" "application/json")
otherHandler
otherHandler :: Handler b Api ()
otherHandler = metod Get doActualStuff <|> metod Get doMoreActualStuff
现在,如果我有100条不同的路线,我想向它们添加标题。我必须为所有这些路线编写一个截取功能。如果我想更改标题,我必须修改所有100个截取函数。
有简单的简单方法吗?
答案 0 :(得分:1)
有了sjakobi提供的暗示,我明白了。这可以这样做:
apiRoutes :: [(ByteString, Handler b Api ())]
apiRoutes = map (mapSecond (addHeaders >>))
[("status", addHeader)]
addHeaders :: Handler b Api ()
addHeaders = do
modifyResponse (setHeader "Content-Type" "application/json")
modifyResponse (setHeader "more-header" "more-header")
mapSecond :: (b -> c) -> (a,b) -> (a,c)
mapSecond f (a,b) = (a,f b)