2015-10-12 60 views
4

我正在使用Plug並且我想了解。Plug,使用選項在初始化時通過Plug.Router語法

我的代碼如下所示:

defmodule Numerino.Plug do 
    use Plug.Router 
    use Plug.Debugger 

    plug :put_resp_content_type, "application/json" 
    plug :match 
    plug :dispatch 

    def init options do 
    IO.inspect options 
    options 
    end 

    get "/" do 
    conn 
    |> IO.inspect 
    |> send_resp(201, "world") 
    end 

    match _ do 
    send_resp(conn, 404, "Not found.") 
    end 

end 

了進去,我需要使用作爲參數傳遞的option

如何訪問保持相同Plug.Router語法的選項?

回答

3

您還未指定爲什麼要這樣做,所以我只能給出一個通用答案。如果您有特定用例,那麼可能會有更好的解決方案。


您可以通過添加額外的插件到存儲OPTS在康涅狄格州的私有存儲設備,路由器這樣做:

plug :opts_to_private 

defp opts_to_private(conn, opts) do 
    put_private(conn, :my_app_opts, opts) 
end 

這一操作將是你的路由訪問與conn.private.my_app_opts

get "/" do 
    conn.private.my_app_opts 
    |> IO.inspect 

    conn 
    |> send_resp(201, "world") 
end 

調度功能defoverridable/1所以你也可以通過重載函數做同樣的事情:

defp dispatch(conn, opts) do 
    conn = put_private(conn, :my_app_opts, opts) 
    super(conn, opts) 
end 

但是我發現定義了一個新功能,如opts_to_private清潔。

+0

我發現兩個解決方案都很不好...謝謝無論如何:) – Siscia

+1

這不再適用於當前的插件。我在'opts_to_private'中選擇'[]'作爲opts(在init中,我得到了適當的選擇)。 – Marqin

相關問題