我目前从Network.Wai.Middleware.RequestLogger运行中间件logStdoutDev,但它只记录路径和Accept标头(也可能是其他标头).我也希望看到POST和PUT请求的正文.这个身体恰好是json,所以只需将它打印到stdout即可.
我已经搜索了一个WAI中间件,它记录了所有内容,但没有找到任何内容.我真的不太了解WAI内部的东西来写一些提取POST体的东西,然后把它放回自己,所以我希望现在避免这种学习曲线.
WAIMiddleware只是一个转变Application:
type Middleware = Application -> Application
Run Code Online (Sandbox Code Playgroud)
并且Application只是一个处理程序:
type Application = Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived
Run Code Online (Sandbox Code Playgroud)
您需要做的就是定义处理程序,该处理程序将记录您想要的任何内容并将“实际工作”委托给下游:
-- note that this is equivalent to Application -> Application
logAllMiddleware :: Application -> Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived
logAllMiddleware app req respond = do
print . unpack . requestBody req
app req respond
Run Code Online (Sandbox Code Playgroud)
请记住,我在没有访问 ghc 的情况下编写了这段代码。它可能不完全正确。