如何在函数的参数内对JSON进行解构/解码?

时间:2019-11-17 22:08:58

标签: elixir phoenix-framework

我对Elixir很陌生,正在尝试构建我的第一个端点。我刚刚使用mix phx.new设置了一个新应用,并创建了我的第一个控制器。

defmodule AuthWeb.AuthController do
  use AuthWeb, :controller

  def login(conn, params) do
    IO.puts(inspect(params))
    redirect(conn, external: "https://google.com")
  end
end

使用您在router.ex中期望的配置,它可以正常工作。

此端点当前正在通过以下curl命令命中。

curl -XPOST http://localhost:4000/api/login -d '{"username": "foo", "password": "bar"}'

我想以某种方式在login函数的参数中对该JSON进行解构/解码。

params自变量具有以下值:

%{"{\"username\": \"foo\", \"password\": \"bar\"}" => "[FILTERED]"}

如何使用模式匹配来提取usernamepassword绑定?惯用的方法是什么?

1 个答案:

答案 0 :(得分:1)

此答案帮助我更好地理解了问题:https://stackoverflow.com/a/41398480/1911755

我认为问题是我在请求中缺少内容类型标头。

curl -XPOST http://localhost:4000/api/login -H "Content-Type: application/json" -d '{"username": "foo", "password": "bar"}'

添加后,params的值变为:

%{"password" => "[FILTERED]", "username" => "foo"}

可以像这样被破坏:

def login(conn, %{"username" => username, "password" => password}) do
  IO.puts(inspect({username, password}))
  ...
end