George Francis
George Francis

Reputation: 502

Body of post request not sending correctly

I am writing a POST request that should send some information to a REST api using elixir, this information should be able to be accessed in the conn.body_params, however it appears empty.

My code is as follows:

conn2 = conn(:post, gameID<>"/guesses", Poison.encode!(%{guess: "p"}))
      |> GameRouter.call()
      assert conn2.status == 201

My plug also has the following configuration:

plug Plug.Parsers, parsers: [:urlencoded, :multipart, :json],  pass: ["*/*"], json_decoder: Poison

How should it be written as to actually send the information in the POST request?

Upvotes: 0

Views: 343

Answers (1)

Adam Millerchip
Adam Millerchip

Reputation: 23091

You need to add the content-type: application/json header so that Plug.Parsers will know to use the json parser.

conn2 =
  conn(:post, gameID <> "/guesses", Poison.encode!(%{guess: "p"}))
  |> put_req_header("content-type", "application/json")
  |> GameRouter.call()

The pass: ["*/*"] is telling Plug.Parsers to ignore all content types it doesn't know about. If you remove that, you will get Plug.Parsers.UnsupportedMediaTypeError, which would have helped you identify the problem.

Upvotes: 1

Related Questions