Elixir Phoenix 处理带参数的 get 请求

Tan*_*ano 3 elixir

我定义了一个路由器,如下所示:

get("/api/cars", CarController, :cars)
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我cars在函数内部CarController解析paramsget请求传递的所有内容。我的cars函数现在正在使用一个case语句,因此如果提供了一些参数,请执行某些操作。我的问题是如何解析路由器中的参数名称,例如,如果我收到这样的 get 请求,/api/cars?type=coupe 我如何在get路由器上匹配该请求,因为我想单独处理它而不是使用该cars函数。

zwi*_*pie 5

长话短说,我认为您无法匹配路由器中的 query_params,这取决于处理路由的控制器操作。因此,在这种情况下,您可以在控制器操作中对 query_params 进行模式匹配:

路由器扩展程序

get "/api/cars", CarController, :cars
Run Code Online (Sandbox Code Playgroud)

汽车控制器.ex

defmodule CarController do
  use MyAppweb, :controller

  def cars(conn, %{"type" => type} = params) do
    ...
  end

  def cars(conn, params) do
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)