【问题标题】:ParseError in Yesod.Core.Class.YesodYesod.Core.Class.Yesod 中的 ParseError
【发布时间】:2013-06-07 20:29:35
【问题描述】:

我有一个 Yesod Web 应用程序,它调用另一台服务器上的 Web 服务。我将 yesod 中的 Http 管理器重用于我对该 Web 服务的请求。 在某些调用中,我收到 Yesod 错误,并且我不确定 Yesod 错误处理程序为何会启动,因为错误处理不是 Manager 的一部分。 我的代码对 HTTP 响应进行了自己的状态处理(我对请求进行了let req' = req { H.checkStatus = \_ _ _ -> Nothing })。

我得到的错误:

07/Jun/2013:14:05:15 +0200 [Error#yesod-core] ParseError {errorContexts = [], errorMessage = "Failed reading: satisfy", errorPosition = 1:1} @(yesod-core-1.2.0.4:Yesod.Core.Class.Yesod ./Yesod/Core/Class/Yesod.hs:471:5)

我有一个明显的印象,Web 服务返回一个错误,Yesod 正在处理它而不是我的代码。我的 Web 服务客户端代码抛出异常,该异常被捕获以重定向到错误页面,当我在服务调用中出错时,这很有效,我只是不明白为什么我会在某些请求上得到这个 ParseError。

我正在转储从 Web 服务获得的请求和响应,但我从未在日志中看到响应,这似乎表明 yesod 正在拦截响应。

有什么想法吗?

【问题讨论】:

    标签: haskell yesod


    【解决方案1】:

    好的,抱歉这个愚蠢的问题,我已经想通了。 http-conduit 代码抛出 ParseError,而我的代码没有捕捉到它,所以 Yesod 正在呕吐。如果我捕捉到 ParseError,我会得到我的错误页面。现在,http-conduit 失败并显示如此突然的消息是否正常,我不知道,但我确实认为 Web 服务行为异常。

    【讨论】:

    • 这看起来像一个 attoparsec 错误消息。你是在用aeson解析无效的json数据吗?
    • 是的,Web 服务应该发回 json,但在某些情况下没有,因此发送了一个 parseerror,但从未被捕获。我添加了一个捕获,一切都很好。
    猜你喜欢
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多