0

我正在使用 Httpoison 执行获取请求,并且我想使用 case 语句对响应进行模式匹配。这是代码:

  def current() do
    case HTTPoison.get!(@api_url) do
      {:ok, %HTTPoison.Response{body: body, status_code: 200}} ->
        IO.puts body
      {:error, %HTTPoison.Error{reason: reason}} ->
        IO.inspect reason
    end
  end

当状态码为 200 时,打印正文。出现错误时,检查原因。

我像这样从服务器得到响应,

%HTTPoison.Response{body: "{\"USD\":10067.08}", headers: <<removed for readability>>, status_code: 200}

以及 (CaseClauseError) 没有 case 子句匹配的错误:

当我收到正文和状态码为 200 的响应时,为什么会收到“无子句”错误?

4

1 回答 1

1

问题是!之后get

HTTPoison.get!(@api_url)将返回%HTTPoison.Response{body: body, ...}或引发异常。

如果您愿意,请{:ok, %HTTPoison.Response{body: body, ...}改用HTTPoison.get(@api_url)(without !)。

要么:

def current() do
    case HTTPoison.get(@api_url) do
      {:ok, %HTTPoison.Response{body: body, status_code: 200}} ->
        IO.puts body
      {:error, %HTTPoison.Error{reason: reason}} ->
        IO.inspect reason
    end
end

或者

def current() do
    %HTTPoison.Response{body: body, status_code: 200}} = HTTPoison.get!(@api_url) 
    IO.puts body           
end
于 2018-01-31T22:27:07.327 回答