Return JSON 在 Phoenix 端点中进行 REST 调用之后
Return JSON after REST call in Phoenix endpoint
我正在学习 Elixir 和 Phoenix,我正在构建一个需要查询 Github 的 APIs.
的副项目
这是执行调用的模块
defmodule Github do
use HTTPoison.Base
def process_url(url) do
"https://api.github.com/" <> url
end
def process_response_body(body) do
body
|> Poison.decode!
|> Enum.map(fn({k, v}) -> {String.to_atom(k), v} end)
end
end
这是在“/api/github/search”
上响应 GET 的控制器
defmodule MyApp.GithubController do
use MyApp.Web, :controller
require Github
def search(conn, _params) do
json conn, search_repositories
end
def search_repositories() do
url = "search/repositories?q=language:javascript&sort=stars&order=desc"
Github.get! url
end
end
我从 Phoenix 收到一个错误页面,上面写着
unable to encode value: {:total_count, 2389278}
所以有些东西在工作,我实际上是在调用 Github 的 API,但由于某种原因我错过了一步,我按照这里的例子 https://github.com/edgurgel/httpoison#wrapping-httpoisonbase
非常感谢任何帮助/提示!
不确定您的预期结果是什么,但我假设您只想从您的控制器 return 来自 Github 作为 JSON 的完整响应。就让Poison来处理解码,不用再处理了。
def process_response_body(body) do
body
|> Poison.decode!
end
你缺的就是得到的事实! return 不是 JSON,而是一个 %HTTPoison.Response 结构,可以在此处的第一个用法示例中看到 https://github.com/edgurgel/httpoison
该结构包含您处理的 body、headers 和状态代码。您可以使用模式匹配来提取您的 json 和 return 它:
def search_repositories() do
url = "search/repositories?q=language:javascript&sort=stars&order=desc"
%HTTPoison.Response{:body => json, :headers => headers, :status_code => code} = Github.get! url
IO.inspect headers
IO.inspect code
json
end
我正在学习 Elixir 和 Phoenix,我正在构建一个需要查询 Github 的 APIs.
的副项目这是执行调用的模块
defmodule Github do
use HTTPoison.Base
def process_url(url) do
"https://api.github.com/" <> url
end
def process_response_body(body) do
body
|> Poison.decode!
|> Enum.map(fn({k, v}) -> {String.to_atom(k), v} end)
end
end
这是在“/api/github/search”
上响应 GET 的控制器defmodule MyApp.GithubController do
use MyApp.Web, :controller
require Github
def search(conn, _params) do
json conn, search_repositories
end
def search_repositories() do
url = "search/repositories?q=language:javascript&sort=stars&order=desc"
Github.get! url
end
end
我从 Phoenix 收到一个错误页面,上面写着
unable to encode value: {:total_count, 2389278}
所以有些东西在工作,我实际上是在调用 Github 的 API,但由于某种原因我错过了一步,我按照这里的例子 https://github.com/edgurgel/httpoison#wrapping-httpoisonbase
非常感谢任何帮助/提示!
不确定您的预期结果是什么,但我假设您只想从您的控制器 return 来自 Github 作为 JSON 的完整响应。就让Poison来处理解码,不用再处理了。
def process_response_body(body) do
body
|> Poison.decode!
end
你缺的就是得到的事实! return 不是 JSON,而是一个 %HTTPoison.Response 结构,可以在此处的第一个用法示例中看到 https://github.com/edgurgel/httpoison
该结构包含您处理的 body、headers 和状态代码。您可以使用模式匹配来提取您的 json 和 return 它:
def search_repositories() do
url = "search/repositories?q=language:javascript&sort=stars&order=desc"
%HTTPoison.Response{:body => json, :headers => headers, :status_code => code} = Github.get! url
IO.inspect headers
IO.inspect code
json
end