【问题标题】:how to process params from react frontedn in phoenix api?如何在phoenix api中处理来自反应前端的参数?
【发布时间】:2019-04-23 18:09:50
【问题描述】:

嘿,我正在向我的后端发送一个如下所示的请求:

  axios
.post(PAYMENT_SERVER_URL, {
  description,
  email: token.email,
  source: token.id,
  subscriptionID
}

并且在 api 中调用到达,但只有当我注释掉发布请求的内容时它才有效。 我尝试使用架构和变更集使其可用,但还没有成功。

 use Ecto.Schema
  import Ecto.Changeset

  schema "objs" do
    field(:description)
    field(:email)
    field(:source)
    field(:subscriptionID)
  end

  def changeset(obj, params \\ %{}) do
    obj
    |> cast(params, [:descriprion, :email, :source, :subscriptionID])
  end

  def create(_conn, params) do
    changeset(params)
    //log it out
  end
end

错误信息:

iex(1)> [info] OPTIONS /api/users
iex(1)> [debug] ** (Phoenix.Router.NoRouteError) no route found for OPTIONS /api/users (MyApiWeb.Router)
    (myApi) lib/myApi_web/router.ex:1: MyApiWeb.Router.__match_route__/4
    (myApi) lib/phoenix/router.ex:307: MyApiWeb.Router.call/2
    (myApi) lib/myApi_web/endpoint.ex:1: MyApiWeb.Endpoint.plug_builder_call/2
    (myApi) lib/plug/debugger.ex:122: MyApiWeb.Endpoint."call (overridable 3)"/2
    (myApi) lib/myApi_web/endpoint.ex:1: MyApiWeb.Endpoint.call/2
    (plug) lib/plug/adapters/cowboy/handler.ex:16: Plug.Adapters.Cowboy.Handler.upgrade/4
    (cowboy) c:/jsproject/myApi/deps/cowboy/src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4

【问题讨论】:

  • 看起来不像您将结构传递给该变更集。也许是问题?
  • @Bitwise 不能单独使用参数吗?我需要投吗?我还在帖子中添加了错误消息
  • 看起来您仍然需要创建一个路由和一个控制器操作,也就是一个“端点”,以便请求命中。
  • 是的,我也明白了,我将帖子更改为选项,现在它正在工作,但现在我遇到了一个新问题,请求到达但参数显示为空:stackoverflow.com/questions/51454195/…

标签: reactjs elixir phoenix-framework


【解决方案1】:

假设您正在使用该请求创建一个用户。您的创建操作如下所示:

def create(_conn, params) do
  changeset = User.changeset(%User{}, params)
  //log it out
  Repo.insert(changeset)
end

【讨论】:

    【解决方案2】:

    提供的错误信息给我们留下了两种可能性:

    1. 客户端逻辑有问题
    2. 后端以某种方式将POST 方法映射到OPTIONS

    后者似乎不太可能,所以我会把钱押在客户身上。进一步分析需要更多信息。

    关于OPTIONS 的旁注

    OPTIONS 用于在资源上找出允许的方法(GETPOST 等)。它被定义为安全和幂等的,这不是您在创建新数据时想要的。 POST 绝对是这里的正确选择(不同情况下PUT 也可能是合适的人选)。

    有关OPTIONS consult the documentation的更多信息。

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 2023-01-31
      • 1970-01-01
      • 2022-09-27
      • 2021-03-30
      • 1970-01-01
      • 2021-08-03
      • 2018-05-30
      • 2017-05-16
      相关资源
      最近更新 更多