【问题标题】:Is there a way to have a Phoenix Plug just for one route?有没有办法只为一条路线拥有凤凰插头?
【发布时间】:2020-07-14 17:14:29
【问题描述】:

在凤凰城我的路线如下:

  scope "/", ManaWeb do
    pipe_through [:browser, :auth]
    get "/register",  RegistrationController, :new
    post "/register", RegistrationController, :register
  end

但是我想为最后一条路由 (POST) 设置一个 Plug。

我将如何使用当前的工具来解决这个问题?

【问题讨论】:

    标签: routing elixir phoenix-framework plug


    【解决方案1】:

    正如Phoenix.Router.pipeline/2 的文档中所述

    每次调用pipe_through/1 时,新的管道都会附加到之前给出的管道上。

    也就是说,这会起作用:

    scope "/", ManaWeb do
      pipe_through [:browser, :auth]
      get "/register",  RegistrationController, :new
    
      pipe_through :post_plug
      post "/register", RegistrationController, :register
    end
    

    【讨论】:

    • 请记住,您放在pipe_through :post_plug 下方的任何路线都将调用:post_plug
    【解决方案2】:

    另一种解决方案是直接在控制器中使用插件

    defmodule ManaWeb.RegistrationController do
      # import the post_plug...
      plug :post_plug when action in [:register]
    
      def register(conn, params) do
        # ...
      end
    end
    

    【讨论】:

    • 我会说这比我的建议更优雅。赞成。
    • 流水线方法对我来说已经足够好了,这很有趣,因为 il 允许在每个路由中设置控制器中的插件。这是在某处记录的吗?
    • @thodg 它应该在官方文档中的某个地方,但我在 Programming Phoenix 书中读到了它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多