首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即插即用分析器:提高ParseError

即插即用分析器:提高ParseError
EN

Stack Overflow用户
提问于 2018-07-03 10:25:05
回答 2查看 836关注 0票数 1

我正在编写一个插件解析器,其中包括使用Poison解码JSON (我更愿意让Plug.Parsers.JSON这样做,但我需要读取原始请求体来根据签名验证它,所以这是不可能的)。

我正在使用Poison.decode/2来解码json。这将在错误时返回一个{:error, ...}元组。作为一个插件解析器,如果在解析过程中出现错误,我想我会引发Plug.Parsers.ParseError。然而,ParseError需要一个exception结构。我没有这些,我只有从Poison.decode/2返回的元组。

作为一种解决办法,我可以使用Poison.decode!/2rescue (引发的错误),将其重新引发为ParseError,但当不提升的decode/2可用时,这似乎很奇怪。

因此,我的问题是,在日益抽象的过程中:

  1. 如何在没有源异常的情况下从解析器引发ParseError
  2. 我是否需要提高ParseError,还是更好地引发我自己的异常?
  3. 还有更好的方法,允许我在不重新实现JSON解析的情况下验证签名吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-06 05:55:25

(我更愿意让Plug.Parsers.JSON这样做,但我需要读取原始请求体来根据签名验证它,所以这是不可能的)。

..。

  1. 还有更好的方法,允许我在不重新实现JSON解析的情况下验证签名吗?

Plug.Parsers.JSON这样做实际上是最好的选择。从1.5.1版本开始,就可以向解析器提供一个自定义体阅读器,该解析器可以缓存主体以供以后使用。这是一个比重新实现JSON解析器插件更通用的解决方案。

这是我的定制阅读器:

代码语言:javascript
复制
def read_body(conn, opts) do
  case Plug.Conn.read_body(conn, opts) do
    {res, body, conn} when res in [:ok, :more] ->
      {res, body, update_in(conn.assigns[:raw_body], &((&1 || "") <> body))}

    unknown ->
      unknown
  end
end
票数 0
EN

Stack Overflow用户

发布于 2018-07-03 10:56:37

如何在没有源异常的情况下从解析器引发ParseError

您需要自己创建Plug.Parsers.ParseError

代码语言:javascript
复制
raise %Plug.Parsers.ParseError{exception: %MyException{message: "Failed to parse"}}

我是否需要提高ParseError,还是更好地引发我自己的异常?

你可能会提出你想要什么,但因为它确实是ParseError,我认为没有任何理由提出不同的东西。

有没有更好的方法..。

这个太武断了。JSON解析似乎没有问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51152230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档