Я пытаюсь сделать 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
}