我正在尝试编写一个插件,如果请求的 JSON 格式错误,这将生成一个自定义错误,这在我们的场景中很常见(因为我们在邮递员中使用变量。例如,有时值之外没有引号,它会导致格式错误JSON)。我得到的唯一帮助是https://groups.google.com/forum/#!topic/phoenix-talk/8F6upFh_lhc这当然不起作用。
defmodule PogioApi.Plug.PrepareParse do
import Plug.Conn
@env Application.get_env(:application_api, :env)
def init(opts) do
opts
end
def call(conn, opts) do
%{method: method} = conn
# TODO: check for PUT aswell
if method in ["POST"] and not(@env in [:test]) do
{:ok, body, _conn} = Plug.Conn.read_body(conn)
case Jason.decode(body) do
{:ok, _result} -> conn
{:error, _reason} ->
error = %{message: "Malformed JSON in the body"}
conn
|> put_resp_header("content-type", "application/json; charset=utf-8")
|> send_resp(400, Jason.encode!(error))
|> halt
end
else
conn
end
end
end
这条线
{:ok, body, _conn} = Plug.Conn.read_body(conn)
如何正确阅读和解析正文。我知道在 POST 中,我们总是会收到 format=JSON 请求
问题:问题是正文只能读取一次。如果我之前在自定义插件中阅读过,Plug.Parses 将无法找到正文