首页 > 解决方案 > 通过 Phoenix Elixir 处理 Pipe 中的不同范围和版本

问题描述

我有 2 条管道router.ex

  pipeline :api_v1 do
    plug :accepts, ["json", "jpg"]
    plug CORSPlug, origin: ["*"]
    plug APIVersion, version: :v1
  end

  pipeline :api_v2 do
    plug :accepts, ["json", "jpg"]
    plug CORSPlug, origin: ["*"]
    plug APIVersion, version: :v2
  end

然后我有这两个范围。

一为/v2

  scope "/v2", EvercamMediaWeb do
    pipe_through :api_v2

一为/v1

  scope "/v1", EvercamMediaWeb do
    pipe_through :api_v1

在这两个范围内,所有路线都是相同的。并且由于拥有 2 个管道和 2 个版本,我必须在 2 个不同的 pipe_through 中复制所有路由,这有可能使这个动态吗?

这样所有路由都将在router.ex文件中写入一次,但两个范围都可以处理?

标签: elixirphoenix-framework

解决方案


它仍然是普通的好Elixir,基本语法适用。

for v <- [:v1, :v2] do
  pipeline :"api_#{v}" do
    plug :accepts, ["json", "jpg"]
    plug CORSPlug, origin: ["*"]
    plug APIVersion, version: v
  end
end

范围相同

for v <- [:v1, :v2] do
  scope to_string(v), EvercamMediaWeb do
    pipe_through :"api_#{v}"
end

推荐阅读