2016-01-28 48 views

回答

6

繼承人從一本書的摘錄 - 編程鳳凰:

「有時候,你可能需要鳳凰做一些繁重的改造方案這是初始化函數的工作初始化發生在編譯時。 Plug會使用init的結果作爲第二個參數來調用,因爲init通常在編譯時被調用,所以它是驗證選項和準備一些工作的最佳位置,這樣調用就可以儘可能快。呼叫是主力,我們希望它做盡可能少的工作。「

例如 - 在您的routes.ex文件中使用插件

pipeline :api do 
    plug :accepts, ["json"] 
    plug Example.Authenticated, repo: Example.Repo 
    end 

repo: Example.Repo是正在傳遞的選項 - 在init函數內部Example.Repo

defmodule Example.Authenticated do 
    import Plug.Conn 

    def init(opts) do 
    Keyword.fetch!(opts, :repo) 
    end 

    def call(conn, repo) do 
    ... 
    end 

end 

我假設在Plug.Router的情況下 - 在編譯時修改可能是 - 加載模塊建立/修改路線 - 可能來自外部來源?取決於你想要完成的事情。

+1

這應該是答案。我是Phoenix和Plug的新用戶,編譯時間方面從聯機文檔中並不明顯。我無法弄清楚爲什麼一個簡單的測試日誌功能沒有受到影響,但是由於它在編譯時這是有道理的。 – ibgib

相關問題