Доступ к результату Elixir Plug.Parsers.JSON

Я пишу небольшой http-сервер с помощью Elixir Plug и испытываю некоторые затруднения с пониманием того, как работает его парсер. Я не могу понять, как получить доступ к результату парсера в моем маршрутизаторе. У меня сейчас

...
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 которая является соединением, поэтому не знаю, как получить проанализированное тело из запроса.

1 ответ

Решение

Plug это behaviour, имея 2 обратных вызова: init/1 а также call/2, Последний получает Plug.Conn структура и возвращает возможно измененный Plug.Conn структура. Это позволяет подключать штекеры.

%Plug.Conn{assigns} предназначен для обновления карты между вызовами на разные штекеры.

Plug.Conn реализует Inspect алгебра из коробки, так что просто сделайте:

Logger.debug inspect(conn)

где-нибудь, и вы увидите, где анализатор хранит тело (я бы поспорил, что это какой-то ключ в assigns карта.)

Другие вопросы по тегам