我在中定义了以下路线
router.ex
scope "/api/v1", ProjWeb do
pipe_through :api
post "/sign_up", UserController, :sign_up
post "/sign_in", UserController, :sign_in
end
这是控制器的动作
def sign_up(conn, %{"user" => user_params}) do
# example code
# response
end
def sign_in(conn, %{"user" => %{"email" => email, "password" => password}}) do
### resp
end
/api/v1/sign_up
使用以下有效负载
{
"user": {
"email": "krishna@example.com",
"name": "Krishna",
"password": "SUPER_SECRET_PASS!"
}
}
/api/v1/sign_in
具有以下有效载荷
{
"user": {
"email": "krishna@example.com",
"password": "SUPER_SECRET_PASS!"
}
}
引发以下错误
no function clause matching in ProjWeb.UserController.sign_in/2
日志:
# 1
%Plug.Conn{adapter: {Plug.Cowboy.Conn, :...}, assigns: %{}, before_send:...}
# 2
%{}
答案 0 :(得分:2)
您的有效负载似乎未正确通过,因为您传递的第二个参数是一个空映射(请参阅日志)。由于您的sign_in
函数需要一个带有user
键的结构,因此它无法匹配您的调用。
答案 1 :(得分:0)
听起来您设置了错误的Content-Type
标头。您需要确保要发送Content-Type: application/json
,以便Phoenix知道您正在发送JSON信息。