我正在编写一个插件解析器,其中包括使用Poison解码JSON (我更愿意让Plug.Parsers.JSON这样做,但我需要读取原始请求体来根据签名验证它,所以这是不可能的)。
我正在使用Poison.decode/2来解码json。这将在错误时返回一个{:error, ...}元组。作为一个插件解析器,如果在解析过程中出现错误,我想我会引发Plug.Parsers.ParseError。然而,ParseError需要一个exception结构。我没有这些,我只有从Poison.decode/2返回的元组。
作为一种解决办法,我可以使用Poison.decode!/2和rescue (引发的错误),将其重新引发为ParseError,但当不提升的decode/2可用时,这似乎很奇怪。
因此,我的问题是,在日益抽象的过程中:
ParseError?ParseError,还是更好地引发我自己的异常?发布于 2018-10-06 05:55:25
(我更愿意让
Plug.Parsers.JSON这样做,但我需要读取原始请求体来根据签名验证它,所以这是不可能的)。
..。
让Plug.Parsers.JSON这样做实际上是最好的选择。从1.5.1版本开始,就可以向解析器提供一个自定义体阅读器,该解析器可以缓存主体以供以后使用。这是一个比重新实现JSON解析器插件更通用的解决方案。
这是我的定制阅读器:
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发布于 2018-07-03 10:56:37
如何在没有源异常的情况下从解析器引发
ParseError?
您需要自己创建Plug.Parsers.ParseError:
raise %Plug.Parsers.ParseError{exception: %MyException{message: "Failed to parse"}}我是否需要提高
ParseError,还是更好地引发我自己的异常?
你可能会提出你想要什么,但因为它确实是ParseError,我认为没有任何理由提出不同的东西。
有没有更好的方法..。
这个太武断了。JSON解析似乎没有问题。
https://stackoverflow.com/questions/51152230
复制相似问题