将数据放入请求保管库的中间件



我正在尝试编写一个WAI中间件,将一些数据放入请求的保管库中,但似乎我错过了一些东西,因为我以后无法查找它。即使是最简单的中间件也会失败:

fooMW :: Middleware
fooMW app req sendResponse = do
k <- Vault.newKey @Int
let d = 42
newVault = Vault.insert k d (vault req)
app (req {vault = newVault}) $ res -> sendResponse res

然后我像这样使用:

main = scotty 3000 $ do
middleware fooMW
get "/foo" $ do
k <- liftIO $ Vault.newKey @Int
v <- vault <$> request
let d = Vault.lookup k v
liftIO $ print d
json $ object ["foo" .= ("bar" :: Text)]

执行http :3000/foo时,我希望服务器打印Just 42但打印Nothing,这表明fooMW有问题。我想我错过了一些关于如何编写中间件或如何使用vault的关键知识,但是什么?

调用Vault.newKey每次都会生成不同的密钥,因此应该调用一次并共享它,而不是每次使用该密钥时都调用它。谢谢@danidiaz

最新更新