我用ILIXIR插件编写了一个小型HTTP服务器,并且很难理解它的解析器是如何工作的。我不知道如何在路由器中访问解析器的结果。我现在有

...
plug Plug.Parsers, parsers: [:json],
                json_decoder: Poison
plug :match
plug :dispatch
forward "/admin" , to: VoucherSite.Admin.AdminRouter
...

在管理路由器中,我想访问上面调用的解析器的解析结果
put "/user" do
  ...access result here...
  respond(conn, {:ok, ""})
end

感觉好像我遗漏了一些显而易见的东西,但我所能访问的只是conn这是一个连接,所以不知道如何从请求中获取解析的主体。

最佳答案

Plug是一个behaviour,有两个回调:init/1call/2。后者接收Plug.Conn结构并返回可能已修改的Plug.Conn结构。这样就可以链式连接插头。
%Plug.Conn{assigns}用于更新对不同插头的调用之间的映射。
Plug.Conn implements开箱即用的代数,所以只要:

Logger.debug inspect(conn)

在某个地方,您将看到解析器将主体存储在哪里(我敢打赌它是Inspect映射中的某个键)。

关于json - Elixir Plug.Parsers.JSON的访问结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43186453/

10-10 17:20