POST-запрос к Plug-роутеру с HTTPoison завершается неудачно - PullRequest
0 голосов
/ 02 ноября 2018

Я пытаюсь сделать POST-запрос к маршрутизатору Plug, используя HTTPoison. Мои запросы GET успешны, только POST терпит неудачу. Я не уверен, что проблема в Plug или HTTPoison:

# server.ex

defmodule MyServer do
  use Application
  use Plug.Router

  import Plug.Conn, only: [put_resp_header: 3, send_resp: 3]

  alias Plug.Adapters.Cowboy

  plug(:match)

  plug(Plug.Parsers,
    parsers: [:json],
    pass: ["*/*", "application/json", "text/plain"],
    json_decoder: Poison
  )

  plug(:dispatch)

  post "/myserver/url" do
    conn
    |> send_resp(200, Poison.encode!(%{}))
  end

  def start(_type, _args) do
    port = Application.get_env(:server, :cowboy_port, 8030)
    IO.puts("Started server on http://localhost:#{port}/")

    children = [
      Cowboy.child_spec(:http, __MODULE__, [], port: port)
    ]

    Supervisor.start_link(children, strategy: :one_for_one)
  end
end

А клиент:

# client.ex

host = "http://localhost:8030"

host
|> Path.join("/myserver/url")
|> HTTPoison.post!(Poison.encode!(%{}))
|> IO.inspect()

Ответ, который я получаю, - 500. Я не уверен, почему, поскольку маршрут в маршрутизаторе настроен на прием сообщений POST. Кто-нибудь знает, что я делаю не так?

UPDATE

Люди спрашивают о трассировке стека. Там нет ни одного. Но это ответ 500:

..%HTTPoison.Response{
  body: "",
  headers: [
    {"server", "Cowboy"},
    {"date", "Fri, 02 Nov 2018 20:57:01 GMT"},
    {"content-length", "0"}
  ],
  request_url: "http://localhost:8030/myserver/url"
  status_code: 500
}

1 Ответ

0 голосов
/ 02 ноября 2018

Проблема с этой строкой:

send_resp(200, Poison.encode!(stuff))

Вы не определили переменную с именем stuff, поэтому она выдает исключение, которое возвращает 500 Internal Server Error.

...