1

我想创建一个简单的 HTML 站点,其中包含更简单的表单,只有一个提交按钮。为了实现这一点,我创建了以下仆人 API:

type ClientAPI = 
    "prices" :> Get '[HTML] (Html ()) -- returns HTML UI to the user
    :<|> "updatePrices" :> Post '[HTML] (Html ()) -- handles a recalc request

我的目标是在完成“updatePrices”程序后将用户重定向到“价格”网站。为了做到这一点,我在“updatePrices”处理程序的末尾返回“价格”视图:

updatePricesView :: Handler (Html ())
updatePricesView = do
    -- do the required logic here
    pricesView -- return the view for "prices" endpoint

这几乎可以正常工作。唯一的缺点是我浏览器中的地址设置为“/updatePrices”而不是“/prices”。结果,如果我按 F5,整个过程会再次执行,这有点违反直觉。

这实际上让我想到:如何使用 Servant 正确处理表单?在其他语言中,我通常将其实现为对所需站点的重定向,但在这里看不到类似的东西。

4

0 回答 0