【问题标题】:params does not contain POST Body in Elixir / Phoenix参数不包含 Elixir / Phoenix 中的 POST 正文
【发布时间】:2016-08-08 22:36:34
【问题描述】:

我尝试构建一个非常简单的 REST API。它不包括数据库或模型。

这是我的路由器:

defmodule Zentonies.Router do
  use Zentonies.Web, :router

  pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash
    plug :protect_from_forgery
    plug :put_secure_browser_headers
  end

  pipeline :api do
    plug :accepts, ["json"]
  end

  scope "/v1/events/", Zentonies do
    pipe_through :api
    post "/call", PageController, :call
  end

end

这里是控制器:

defmodule Zentonies.PageController do
  require Logger
  import Joken
  use Zentonies.Web, :controller

  def index(conn, _params) do
    render conn, "index.html"
  end

  def call(conn, params) do
    Logger.debug inspect(params)
    conn
    |> put_status(200)
    |> text("Response.")
  end
end

现在,如果我对这个端点进行 HTTP POST,inspect(params) 不会返回我的 POST 请求的 JSON 正文。相反,它返回:call

非常感谢任何帮助!

【问题讨论】:

  • 您能提供您正在发出的 POST 请求吗?

标签: elixir phoenix-framework


【解决方案1】:

call/2 函数是 defined by Phoenix,它自己用于在每个 Phoenix 控制器中调度正确的操作。通过创建具有该名称的函数,您将覆盖内置功能。您必须为该操作使用不同的名称。查看Phoenix.Controller.Pipeline文档中的“Controllers are plugs”部分:

控制器是插头

与路由器一样,控制器是插件,但它们被连接以调度到称为操作的特定功能。

例如路线:

get "/users/:id", UserController, :show

将调用UserController 作为插件:

UserController.call(conn, :show)

这将触发插件管道并最终调用内部操作插件,该插件将分派到UserController 中的show/2 函数。

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 2017-03-16
    • 2017-02-17
    • 1970-01-01
    • 2013-08-05
    • 2021-12-07
    • 2019-11-27
    • 2018-05-22
    相关资源
    最近更新 更多