如何像使用Maybe monad一样使用Scotty的ActionT monad,并返回早期HTTP错误响应?

巴克

我希望能够将自定义错误页面和状态返回给用户,并在发生此类错误时ActionT monad中结束计算我的理解是,这有点像Maybemonad,其中计算会在Nothing遇到第一个时结束,但会发出最终错误消息(通过HTTP发送给用户)。

我有一个看起来像这样的代码片段:

  liftIO $ scotty (config & port & fromEnum) $
    get "/cow/:mark" $ do
      qParams :: DM.Map LTxt.Text LTxt.Text <- DM.fromList <$> params
      markTxt <- param "mark"
      let intervalTxtMay = DM.lookup "interval" qParams
      let cowMarkMaybe = TR.readMaybe $ Txt.unpack markTxt
      cowMark <- case cowMarkMaybe of
        Nothing -> do
          status status404
          textLazy $ "Couldn't parse cow mark " ++  markTxt ++ " as integer."
          finish
        Just cmVal-> pure $ CowMark cmVal
      liftIO $ logLogIt Debug lgr ["***** Made it past cowMark ******"]
      ...

该代码至少存在两个问题:finish这里似乎没有做任何特别有用的事情,即计算继续进行,并且***** Made it past cowMark ******每次加载通常会触发404的页面时,我仍然在日志中看到该消息。第二个问题是404错误未制定,即使应该是404,我也收到200响应。

有没有办法在Scotty中实现所需的行为?

酱菜罐

这两个问题都源于Nothing永远无法TR.readMaybe成功案件打印markTxtcowMarkMaybe在后者应为后者的情况下Nothing

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Xamarin“命名空间,但像类型一样使用”错误

来自分类Dev

“是字段,但像类型一样使用”错误

来自分类Dev

如何使用setxkbmap重新映射我的CapsLock密钥,使其像返回键一样工作?

来自分类Dev

如何像Firebug一样使用Xul设置许多错误

来自分类Dev

Xamarin“命名空间,但像一个类型一样使用”错误

来自分类Dev

使用泛型像Swift一样将响应封装在Kotlin中

来自分类Dev

如何像使用接口一样使用枚举?

来自分类Dev

如何像使用接口一样使用枚举?

来自分类Dev

使HTTP请求像php表单一样使用nodejs

来自分类Dev

“ MYPROGRAM.IO.MemoryStream”是“属性”,但像“类型”一样使用错误?

来自分类Dev

Laravel:语法错误或访问冲突导致我也像字段一样使用“订单”

来自分类Dev

如何像查询精确值一样使用MySQL

来自分类Dev

如何像Java一样使用C ++实现printstacktrace

来自分类Dev

如何使用.htaccess使url像目录样式一样

来自分类Dev

如何像Stata一样在R中使用滞后

来自分类Dev

如何像登录网站一样使用 Hashicorp Vault

来自分类Dev

使用monad转换程序和延续来使程序早期返回的解释器最少

来自分类Dev

像总结一样使用崩溃

来自分类Dev

像toggleclass一样使用.css

来自分类Dev

像toggleclass一样使用.css

来自分类Dev

使用像按钮一样的图像

来自分类Dev

像scp一样使用sftp

来自分类Dev

像 UISwitch 一样使用 UISegmentedControl

来自分类Dev

将Maybe monad与monadic动作一起使用

来自分类Dev

通过Mayad操作使用Maybe monad

来自分类Dev

我可以使用 AJAX 请求来像 reqular http 请求一样更新整个页面吗?

来自分类Dev

与1.2.0一样,如何在angularjs 1.0.8中使用$ http加载跨域JSON

来自分类Dev

如何仅使用css绘制错误图标,就像在图像中一样

来自分类Dev

像facebook一样的按钮:响应宽度

Related 相关文章

  1. 1

    Xamarin“命名空间,但像类型一样使用”错误

  2. 2

    “是字段,但像类型一样使用”错误

  3. 3

    如何使用setxkbmap重新映射我的CapsLock密钥,使其像返回键一样工作?

  4. 4

    如何像Firebug一样使用Xul设置许多错误

  5. 5

    Xamarin“命名空间,但像一个类型一样使用”错误

  6. 6

    使用泛型像Swift一样将响应封装在Kotlin中

  7. 7

    如何像使用接口一样使用枚举?

  8. 8

    如何像使用接口一样使用枚举?

  9. 9

    使HTTP请求像php表单一样使用nodejs

  10. 10

    “ MYPROGRAM.IO.MemoryStream”是“属性”,但像“类型”一样使用错误?

  11. 11

    Laravel:语法错误或访问冲突导致我也像字段一样使用“订单”

  12. 12

    如何像查询精确值一样使用MySQL

  13. 13

    如何像Java一样使用C ++实现printstacktrace

  14. 14

    如何使用.htaccess使url像目录样式一样

  15. 15

    如何像Stata一样在R中使用滞后

  16. 16

    如何像登录网站一样使用 Hashicorp Vault

  17. 17

    使用monad转换程序和延续来使程序早期返回的解释器最少

  18. 18

    像总结一样使用崩溃

  19. 19

    像toggleclass一样使用.css

  20. 20

    像toggleclass一样使用.css

  21. 21

    使用像按钮一样的图像

  22. 22

    像scp一样使用sftp

  23. 23

    像 UISwitch 一样使用 UISegmentedControl

  24. 24

    将Maybe monad与monadic动作一起使用

  25. 25

    通过Mayad操作使用Maybe monad

  26. 26

    我可以使用 AJAX 请求来像 reqular http 请求一样更新整个页面吗?

  27. 27

    与1.2.0一样,如何在angularjs 1.0.8中使用$ http加载跨域JSON

  28. 28

    如何仅使用css绘制错误图标,就像在图像中一样

  29. 29

    像facebook一样的按钮:响应宽度

热门标签

归档