首页 > 解决方案 > Elixir Phoenix.Route.NoRouteError

问题描述

我正在阅读“Programming Phoenix”一书,在第 60 页左右添加 /Users/New 路由后,我的路由器似乎已停止正常运行。

当我尝试导航到任何 /Users 路线时,我得到

“找不到 GET /Users (Rumbl.Router) 的路由”

我的 router.ex 文件如下所示:

defmodule Rumbl.Router do
  use Rumbl.Web, :router

  pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash
    plug :protect_from_forgery
    plug :put_secure_browser_headers
  end

  pipeline :api do
    plug :accepts, ["json"]
  end

  scope "/", Rumbl do
    pipe_through :browser # Use the default browser stack

    get "/", PageController, :index
    resources "/users", UserController, only: [:index, :show, :new, :create]

  end

end

我的控制器如下所示:

defmodule Rumbl.UserController do
  use Rumbl.Web, :controller
  alias Rumbl.User

  def index(conn, _params) do
    users = Repo.all(User)
    render conn, "index.html", users: users
  end

  def show(conn, %{"id" => id}) do
    user = Repo.get(User, id)
    render conn, "show.html", user: user
  end

  def new(conn, _params) do
    changeset = User.changeset(%User{})
    render conn, "new.html", changeset: changeset
  end

end

运行“mix phoenix.routes”返回:

page_path  GET   /           Rumbl.PageController :index
user_path  GET   /users      Rumbl.UserController :index
user_path  GET   /users/new  Rumbl.UserController :new
user_path  GET   /users/:id  Rumbl.UserController :show
user_path  POST  /users      Rumbl.UserController :create

在添加“新”路线之前,它运行良好。我已经尝试删除新路线(以及随之而来的所有内容)并恢复到以前的方式

get "/users", UserController, :index
get "/users/:id", UserController, :show

它仍然不起作用。

我重新启动了 phoenix 服务器并尝试从头开始重新创建 router.ex 文件。我很茫然,这可能是怎么回事?

这是堆栈跟踪:

[debug] ** (Phoenix.Router.NoRouteError) no route found for GET /Users (Rumbl.Router)
(rumbl) web/router.ex:1: Rumbl.Router.__match_route__/4
(rumbl) lib/phoenix/router.ex:307: Rumbl.Router.call/2
(rumbl) lib/rumbl/endpoint.ex:1: Rumbl.Endpoint.plug_builder_call/2
(rumbl) lib/plug/debugger.ex:122: Rumbl.Endpoint."call (overridable 3)"/2
(rumbl) lib/rumbl/endpoint.ex:1: Rumbl.Endpoint.call/2
(plug_cowboy) lib/plug/cowboy/handler.ex:18: Plug.Adapters.Cowboy.Handler.upgrade/4
(cowboy) /Users/richardschmidt/Code/Elixir/rumbl/deps/cowboy/src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4

标签: elixirphoenix-framework

解决方案


/Users并且/users不一样。

尝试使用路径的小写版本:/users, /users/new.


推荐阅读