试图了解Plug,特别是Plug.Router.从文档(http://hexdocs.pm/plug/Plug.Router.html).从规范插件有一个init函数,在初始化时调用以传入选项,但那些似乎在定义的路由中不可用.
没有可用选项的原因是什么,是否有允许它的模式?
ori*_*n_e 10
这是本书的摘录 - 编程凤凰:
"有时候,你可能需要Phoenix来做一些繁重的工作来转换选项.这是init函数的工作.init在编译时发生 .Plug会使用init的结果作为第二个参数来调用.因为init经常被调用编译时间,它是验证选项和准备一些工作的理想场所.这样,呼叫可以尽可能快.由于呼叫是主力,我们希望它尽可能少地工作."
例如 - 在routes.ex文件中使用插件
pipeline :api do
plug :accepts, ["json"]
plug Example.Authenticated, repo: Example.Repo
end
Run Code Online (Sandbox Code Playgroud)
repo: Example.Repo是传递的选项 - 到initExample.Repo中的函数
defmodule Example.Authenticated do
import Plug.Conn
def init(opts) do
Keyword.fetch!(opts, :repo)
end
def call(conn, repo) do
...
end
end
Run Code Online (Sandbox Code Playgroud)
我假设在Plug.Router的情况下 - 在编译时可以修改 - 加载构建/修改路由的模块 - 可能来自外部源?取决于你想要完成的事情.
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |