0

Elixir / Phoenix 框架菜鸟在这里。

我正在尝试添加一个新路由,该路由将解析我作为 URL 段传入的字符串。

路由器.ex

# Ping endpoint
scope "/", AppWeb do
 pipe_through :api # Use the default browser stack

 get "/:hash", ListnerController, :ping
end

listner_controller.ex

  def ping(conn, %{"hash" => hash}) do
    with {:ok, resp} <- Monitors.is_valid_hash(hash) do
      render(conn, "hash.json", %{:data => resp})
    end
  end

上下文 - monitor.ex

  def is_valid_hash(hash) do
    hash
  end

我最终得到了 Fallback 操作的错误。只要我不使用 with 宏,代码就可以正常工作。

在此处输入图像描述

4

1 回答 1

1

您的请求将发送到回退控制器,因为您的with模式失败,最终返回hash的不是Plug.Conn. 返回的值不是 aPlug.Conn由 Phoenix 转发到后备控制器。您可能打算{:ok, hash}从以下位置返回is_valid_hash

def is_valid_hash(hash) do
  {:ok, hash}
end
于 2018-05-21T12:18:13.307 回答