我对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]"}
如何使用模式匹配来提取username
和password
绑定?惯用的方法是什么?
答案 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