elixir - 使用 HTTPoison 向 Plug 路由器发出的 POST 请求失败
问题描述
我正在尝试使用 HTTPoison 向 Plug 路由器发出 POST 请求。我的 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。有谁知道我做错了什么?
更新
人们要求堆栈跟踪。没有一个。但这是 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
}
解决方案
问题在于这一行:
send_resp(200, Poison.encode!(stuff))
您还没有定义一个名为 的变量stuff
,因此它会引发一个返回 a 的异常500 Internal Server Error
。
推荐阅读
- javascript - Webpack 5 - 来自 node_modules 的安静警告?
- reactjs - 从 inputComponent 捕获 onChange 事件传递给 OutlinedInput,Material UI
- python - 线程内的异步函数
- python - 使用 Libvirt Python createXMLFrom 克隆卷导致读取数据时文件结束:输入/输出错误
- mongodb - 更改对象数组中对象中的字段
- json - 通过 Codable 将 JSON 解析为数组
- python - 没有为变量张量流提供梯度
- npm - 我无法创建一个反应应用程序,它一直给我一个错误
- reactjs - react-testing-library:测试评估发生得太早
- arrays - 根据 Google 表格中的下拉列表填充单元格