Phoenix - в ProjWeb.UserController.sign_in / 2 нет совпадений с функциональными предложениями - PullRequest
1 голос
/ 07 мая 2019

Я определил следующие маршруты в 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 ]

2 голосов
/ 07 мая 2019

Ваша полезная нагрузка, кажется, не проходит правильно, поскольку второй передаваемый аргумент - пустая карта (см. Журналы).Поскольку ваша функция sign_in ожидает структуру с ключом user, она не может соответствовать вашему вызову.

0 голосов
/ 07 мая 2019

Похоже, у вас установлен неправильный заголовок Content-Type. Вам нужно будет убедиться, что вы отправляете Content-Type: application/json, чтобы Феникс знал, что вы отправляете информацию JSON.

...