How to process params from react frontedn in Phoenix api?

Hey I am quite new to elixir and phoenix and having an issue:

Hey I am sending a request to my backend that looks like this:

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

and in the api the call arrives but it only works if i comment out the contents of the post request. I tried to use schema and changeset to make it usable but no avail yet.

 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

I don’t really understand your question. The actual code producing the error or an error message would be helpful. However there is a typo in the fieds list in the cast function parameters. It should be :description, not :description.

2 Likes

The create function should be in the controller, not in the schema.

I have been using the same setup (React + Phoenix) without trouble. You might show your controller code :slight_smile:

hey the error message is:

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

ok i figure to use options in the api instead of post, but the params are empty for some reason

  def create(conn, params) do
    Logger.info("#{params}")
  end

I would like to just print out the params from this request

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

ok seems to be cors related issue