向 snap 框架中的所有响应添加 header
add a header to all responses in snap framework
标题总结了它。我想在 snap 中为我的所有回复添加一个 header。
我可以为我的每条路线添加一个 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 条不同的路线,并且我想将 header 添加到所有路线中。我必须为所有这些路由编写一个拦截器函数。如果我想更改 header 我必须修改所有 100 个拦截器函数。
有没有简单的方法?
根据 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)
标题总结了它。我想在 snap 中为我的所有回复添加一个 header。 我可以为我的每条路线添加一个 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 条不同的路线,并且我想将 header 添加到所有路线中。我必须为所有这些路由编写一个拦截器函数。如果我想更改 header 我必须修改所有 100 个拦截器函数。
有没有简单的方法?
根据 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)