2017-04-03 7 views
0

Ich schreibe einen kleinen HTTP-Server mit Elixir-Plug und habe einige Probleme zu verstehen, wie sein Parser funktioniert. Ich kann nicht herausfinden, wie ich auf das Ergebnis des Parsers in meinem Router zugreifen kann. Ich habe derzeitZugriff Ergebnis von Elixir Plug.Parsers.JSON

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

Und im Admin-Router will ich von dem oben

put "/user" do 
    ...access result here... 
    respond(conn, {:ok, ""}) 
end 

Es fühlt sich aufgerufen Parser die analysierte Ergebnis zuzugreifen, wie ich bin fehlt etwas offensichtlich, aber alles, was ich Zugang haben, ist conn Das ist die Verbindung also keine Ahnung wie man den geparsten Körper von der Anfrage bekommt.

Antwort

0

Plug ist ein behaviour, mit 2 Rückrufe: init/1 und call/2. Letzterer erhält eine Plug.Conn Struktur und gibt möglicherweise modifiziertePlug.Conn struct. Das ermöglicht Kette Stecker.

%Plug.Conn{assigns} dient dazu, die Karte zwischen den Aufrufen verschiedener Stecker zu aktualisieren.

Plug.Conn implements die Inspect Algebra aus dem Kasten heraus, tun so einfach:

Logger.debug inspect(conn) 

irgendwo und Sie werden sehen, wo der Parser speichert der Körper

(ich, dass es einige Schlüssel in der assigns Karte setzen würde.)
+0

Ah ja es scheint unter body_params zu sein danke :) – BrendanM