与/ *路径匹配的路由不能按预期工作

时间:2017-10-14 20:34:16

标签: elixir phoenix-framework

我有以下router.ex:

scope "/api", MyAppWeb do
  get "/activate", SubscriptionController, :create, as: :activate_account
end

scope "/", MyAppWeb do
  get "/*path", AppController, :index
end

SubscriptionController.create / 2:

def create(conn, %{"token" => token}) do
  ...
end

执行mix phx.routes显示:

activate_account_path    GET   /api/activate   MyAppWeb.SubscriptionController :create
app_path                 GET   /*path          MyAppWeb.AppController :index

因此,根据显示的内容,除了/activate路线在router.ex中排在第一位之外,它应首先匹配。

但是,当我向/api/activate发送GET请求时,它由AppController.index/2处理:

[info] GET /api/activate
[debug] Processing with MyAppWeb.AppController.index/2
Parameters: %{"path" => ["api", "activate"], "token" => "test"}

为什么这样做?

P.S。我需要/*path全能,以便我的SPA正常工作,因此删除它不是一种选择。

更新:结果证明这是我的错。我之前在router.ex中定义了另一个匹配的/*path路由。删除后,只留下底部的路径,路线开始正确匹配。

1 个答案:

答案 0 :(得分:0)

原来这是我的错。我之前在router.ex中定义了另一个匹配的/*path路由。删除后,只留下底部的路径,路线开始正确匹配。