【问题标题】:handling different scopes and versions in Pipe through Phoenix Elixir通过 Phoenix Elixir 处理 Pipe 中的不同范围和版本
【发布时间】:2019-12-21 00:20:09
【问题描述】:

我的router.ex 中有 2 条管道

  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 文件中写入一次,但两个范围都可以处理?

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    它仍然是普通的老好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
    

    【讨论】:

    • 这里怎么替换? `plug APIVersion,版本::v1`
    • 哎呀,对不起,没有意识到它恰好在那里出现了两次。更新。这是简单的 Elixir 代码。
    • 我不关注,对不起。
    • 我的意思是代替 for 循环,这可以在 Plug 中完成,然后将在 router.ex 中使用?
    • 有两个不同的管道,我看不出管道链接中的修改对这里有什么帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    相关资源
    最近更新 更多