路由到从数据库中获取的控制器,returns 导致 http 响应
Route to controller which fetches from database and returns results in http response
我想要一个从数据库 table 和 returns 获取所有条目的路由。
在 router.ex:
get "/categories/" do
[controller] = ["repo"]
Api.Repo.getCategories(conn, controller)
end
在repo.ex中:
def getCategories(conn, controller) do
conn
start_link
categories = Api.Category |> all
|> put_resp_content_type("application/json")
|> send_resp(200, categories)
end
Api.Category.ex
defmodule Api.Category do
use Ecto.Schema
schema "categories" do
field :name, :string
end
def changeset(category, params \ %{}) do
category
|> Ecto.Changeset.cast(params, [:name])
|> Ecto.Changeset.validate_required([:name])
end
end
我收到这些警告和错误:
warning: variable conn in code block has no effect as it is never returned (remove the variable or a
ssign it to _ to avoid warnings)
lib/api/repo.ex:174
warning: variable "start_link" does not exist and is being expanded to "start_link()", please use pa
rentheses to remove the ambiguity or change the variable name
lib/api/repo.ex:175
warning: variable "categories" does not exist and is being expanded to "categories()", please use pa
rentheses to remove the ambiguity or change the variable name
lib/api/repo.ex:178
warning: variable "controller" is unused
lib/api/repo.ex:173
warning: variable "categories" is unused
lib/api/repo.ex:176
== Compilation error on file lib/api/repo.ex ==
** (CompileError) lib/api/repo.ex:178: undefined function categories/0
(stdlib) lists.erl:1338: :lists.foreach/2
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
我好像在用categories
。我做错了什么?
您的错误是由
引起的
categories = Api.Category |> all
|> put_resp_content_type("application/json")
|> send_resp(200, categories)
这是分配给类别的单个管道。因此,send_resp(200, categories)
中的类别未设置。
为了清楚起见,这是编写相同代码的另一种方式:
categories =
Api.Category
|> all
|> put_resp_content_type("application/json")
|> send_resp(200, categories)
此外,conn
和start_link
放错了地方。 conn
什么也不做,start_link
通常 returns 一个丢失的 pid。
我相信你正在尝试这样的事情:
categories = all Api.Category
conn
|> put_resp_content_type("application/json")
|> send_resp(200, categories)
整个例子看起来很奇怪。我从来没有在 Repo 模块中看到过这种类型的东西。通常,您会在控制器中找到它。我无法对 route.ex 文件发表评论,因为我以前从未创建过这样的路由。
你在效仿这个例子吗?如果有,那是什么?
我想要一个从数据库 table 和 returns 获取所有条目的路由。
在 router.ex:
get "/categories/" do
[controller] = ["repo"]
Api.Repo.getCategories(conn, controller)
end
在repo.ex中:
def getCategories(conn, controller) do
conn
start_link
categories = Api.Category |> all
|> put_resp_content_type("application/json")
|> send_resp(200, categories)
end
Api.Category.ex
defmodule Api.Category do
use Ecto.Schema
schema "categories" do
field :name, :string
end
def changeset(category, params \ %{}) do
category
|> Ecto.Changeset.cast(params, [:name])
|> Ecto.Changeset.validate_required([:name])
end
end
我收到这些警告和错误:
warning: variable conn in code block has no effect as it is never returned (remove the variable or a
ssign it to _ to avoid warnings)
lib/api/repo.ex:174
warning: variable "start_link" does not exist and is being expanded to "start_link()", please use pa
rentheses to remove the ambiguity or change the variable name
lib/api/repo.ex:175
warning: variable "categories" does not exist and is being expanded to "categories()", please use pa
rentheses to remove the ambiguity or change the variable name
lib/api/repo.ex:178
warning: variable "controller" is unused
lib/api/repo.ex:173
warning: variable "categories" is unused
lib/api/repo.ex:176
== Compilation error on file lib/api/repo.ex ==
** (CompileError) lib/api/repo.ex:178: undefined function categories/0
(stdlib) lists.erl:1338: :lists.foreach/2
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
我好像在用categories
。我做错了什么?
您的错误是由
引起的categories = Api.Category |> all
|> put_resp_content_type("application/json")
|> send_resp(200, categories)
这是分配给类别的单个管道。因此,send_resp(200, categories)
中的类别未设置。
为了清楚起见,这是编写相同代码的另一种方式:
categories =
Api.Category
|> all
|> put_resp_content_type("application/json")
|> send_resp(200, categories)
此外,conn
和start_link
放错了地方。 conn
什么也不做,start_link
通常 returns 一个丢失的 pid。
我相信你正在尝试这样的事情:
categories = all Api.Category
conn
|> put_resp_content_type("application/json")
|> send_resp(200, categories)
整个例子看起来很奇怪。我从来没有在 Repo 模块中看到过这种类型的东西。通常,您会在控制器中找到它。我无法对 route.ex 文件发表评论,因为我以前从未创建过这样的路由。
你在效仿这个例子吗?如果有,那是什么?