2017-04-03 1 views
0

J'écris un petit serveur http utilisant Elixir Plug et ayant quelques difficultés à comprendre comment fonctionne son analyseur. Je ne peux pas comprendre comment accéder au résultat de l'analyseur dans mon routeur. J'ai actuellementLe résultat d'accès de Elixir Plug.Parsers.JSON

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

Et dans le routeur admin je veux accéder au résultat de l'analyse de l'Parser appelé ci-dessus

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

On dirait que je manque quelque chose évidente, mais tout ce que j'avoir accès à est conn qui est la connexion donc aucune idée de comment obtenir le corps analysé de la demande.

Répondre

0

Plug est un behaviour, ayant 2 rappels: init/1 et call/2. Ce dernier reçoit une structure Plug.Conn et renvoie structure éventuellement modifiéePlug.Conn. Cela permet de chaîne prises.

%Plug.Conn{assigns} est destiné à être utilisé pour mettre à jour la carte entre les appels à différentes prises.

Plug.Conn implements l'algèbre Inspect hors de la boîte, donc il suffit de faire:

Logger.debug inspect(conn) 

quelque part et vous verrez où les analyseur stocke le corps

(je parie que c'est une clé dans la carte assigns.)
+0

Ah oui il semble être sous body_params merci :) – BrendanM