【发布时间】:2017-10-15 05:16:34
【问题描述】:
我有以下 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"}
为什么会这样?
附:我需要 /*path 包罗万象才能让我的 SPA 正常工作,因此不能选择删除它。
更新:这原来是我的错。我之前在 router.ex 中定义了另一个 /*path 路由匹配。一旦我删除它,只留下底部的那个,路由就开始正确匹配了。
【问题讨论】: