你可以通过一个
:body_reader
选择
Plug.Parsers
以便缓存主体以供以后使用。
您不想在解析器之前读取主体,而是缓存主体以便以后从要散列它的插件中读取。
:身体阅读器
-替换(或包装)的可选方法
Plug.Conn.read_body/2
提供访问
在被解析和丢弃之前的原始体。它是标准的
格式
{Module, :function, [args]}
(MFA)并默认为
{Plug.Conn, :read_body, []}
.
有时您可能想定制解析器如何从
连接。例如,您可能希望缓存要执行的主体
稍后进行验证,如HTTP签名验证。这可能是
通过一个定制的身体读取器来实现,该读取器可以读取身体并存储
与此相关,例如:
defmodule CacheBodyReader do
def read_body(conn, opts) do
{:ok, body, conn} = Plug.Conn.read_body(conn, opts)
conn = update_in(conn.assigns[:raw_body], &[body | (&1 || [])])
{:ok, body, conn}
end
end
然后可以设置为:
plug Plug.Parsers,
parsers: [:urlencoded, :json],
pass: ["text/*"],
body_reader: {CacheBodyReader, :read_body, []},
json_decoder: Jason
它被加入了
Plug v1.5.1
.