Phoenix-ProjWeb.UserController.sign_in / 2中没有匹配的功能子句

时间:2019-05-07 10:02:52

标签: elixir phoenix-framework

我在中定义了以下路线 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
   %{}

2 个答案:

答案 0 :(得分:2)

您的有效负载似乎未正确通过,因为您传递的第二个参数是一个空映射(请参阅日志)。由于您的sign_in函数需要一个带有user键的结构,因此它无法匹配您的调用。

答案 1 :(得分:0)

听起来您设置了错误的Content-Type标头。您需要确保要发送Content-Type: application/json,以便Phoenix知道您正在发送JSON信息。