Elixir (RuntimeError)预期操作/2返回插头。连接,所有插头必须接收连接(Conn)并返回连接

Elixir (RuntimeError)预期操作/2返回插头。连接,所有插头必须接收连接(Conn)并返回连接,elixir,phoenix-framework,Elixir,Phoenix Framework,在我的一个控制器中,我有以下代码(摘录): 我做错了什么?堆栈跟踪告诉您控制器操作没有返回Plug.Conn结构。在Elixir中,返回函数最后一个表达式的结果。查看函数的最后一行,确保它返回case表达式的结果 def(conn, params) do final_conn = case HTTPoison.get("https://*****.zendesk.com/api/v2/users/search.json?query=" <> clid, headers,

在我的一个控制器中,我有以下代码(摘录):


我做错了什么?

堆栈跟踪告诉您控制器操作没有返回
Plug.Conn
结构。在Elixir中,返回函数最后一个表达式的结果。查看函数的最后一行,确保它返回case表达式的结果

def(conn, params) do
  final_conn = 
    case HTTPoison.get("https://*****.zendesk.com/api/v2/users/search.json?query=" <> clid, headers, [hackney: hackney]) do
      {:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
        conn
        |> put_status(200)
        |> json(body)
      {:ok, %HTTPoison.Response{status_code: 404}} ->
        conn
        |> put_status(404)
        |> json(%{error_code: "404", reason_given: "Resource not found."})
      {:error, %HTTPoison.Error{reason: reason}} ->
        conn
        |> put_status(500)
        |> json(%{error_code: "500", reason_given: "None."})
    end

  do_something_else(params)

  final_conn
end
def(连接,参数)do
最终连接=
case HTTPoison.get(“https://******.zendesk.com/api/v2/users/search.json?query=“clid,headers,[hackney:hackney])do
{:好的,%HTTPoison.Response{status_code:200,body:body}}->
康涅狄格州
|>put_状态(200)
|>json(正文)
{:好的,%HTTPoison.Response{status_code:404}}->
康涅狄格州
|>put_状态(404)
|>json(%%{错误代码:“404”,给出原因:“未找到资源”。})
{:错误,%HTTPoison.error{原因:原因}}->
康涅狄格州
|>put_状态(500)
|>json(%%{error_code:“500”,给出的原因是:“None.”)
结束
做点别的(参数)
总站
结束

在这个
案例
表达式之后有没有代码?你能发布这个函数的完整源代码吗?你确定这部分代码是错误的吗?也许你在别的地方遇到了一个插件错误。我遇到了这个错误,结果是我有一个在conn上匹配的超渴望路由,并调用了一个不适合我传递的参数的操作。
** (exit) an exception was raised:
    ** (RuntimeError) expected action/2 to return a Plug.Conn, all plugs must receive a connection (conn) and return a connection
        (zentonies) web/controllers/page_controller.ex:1: Zentonies.PageController.phoenix_controller_pipeline/2
        (zentonies) lib/zentonies/endpoint.ex:1: Zentonies.Endpoint.instrument/4
        (zentonies) lib/phoenix/router.ex:261: Zentonies.Router.dispatch/2
        (zentonies) web/router.ex:1: Zentonies.Router.do_call/2
        (zentonies) lib/zentonies/endpoint.ex:1: Zentonies.Endpoint.phoenix_pipeline/1
        (zentonies) lib/plug/debugger.ex:93: Zentonies.Endpoint."call (overridable 3)"/2
        (zentonies) lib/zentonies/endpoint.ex:1: Zentonies.Endpoint.call/2
        (plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
        (cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4
def(conn, params) do
  final_conn = 
    case HTTPoison.get("https://*****.zendesk.com/api/v2/users/search.json?query=" <> clid, headers, [hackney: hackney]) do
      {:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
        conn
        |> put_status(200)
        |> json(body)
      {:ok, %HTTPoison.Response{status_code: 404}} ->
        conn
        |> put_status(404)
        |> json(%{error_code: "404", reason_given: "Resource not found."})
      {:error, %HTTPoison.Error{reason: reason}} ->
        conn
        |> put_status(500)
        |> json(%{error_code: "500", reason_given: "None."})
    end

  do_something_else(params)

  final_conn
end