Phoenix:找不到路由的默认路径

时间:2017-10-30 15:17:40

标签: redirect elixir phoenix-framework router

让我们看一下基本的路由器:

...
scope "/", Backend do
  pipe_through [:browser, :with_session]

  get "/", PageController, :index
end
...

调用http://localhost:4000/login会提升默认值" Phoenix.Router.NoRouteError"。 处理这种情况的最佳方法是什么? 离开默认的凤凰错误页面? 重定向到索引页面? 重定向到找不到的自定义页面?

如何将任何未知路由重定向到单个路径?

1 个答案:

答案 0 :(得分:2)

  

处理这种情况的最佳方法是什么?

没有最佳方法。我个人更喜欢在同一个网址上显示404消息,以便在用户输入拼写错误时,他们可以编辑和修复网址,而无需再次重新输入确切的网址,如果用户必须重新输入,该网站将无效网址重定向到某个地方。

如果您仍想重定向,可以在scope块的末尾创建一个catch-all路由和一个简单的控制器:

# Controller
defmodule MyApp.FourOhFour do
  use MyApp.Web, :controller

  def index(conn, _params) do
    redirect(conn, to: "/404")
  end
end

# Route
scope "/", MyApp do
  get "/*path", FourOhFour, :index
end

以上内容会将所有未知的GET请求重定向到/404。确保此路线在所有get来电之后出现。