Elixir 如何连接插头。具有插头功能的路由器
我正在尝试用Elixir建立一个非常简单、基本的HTTP API。我认为使用Phoenix做这样的事情完全是过火了,所以我想简单地使用Plug。我可以这样设置一个基本路由器:Elixir 如何连接插头。具有插头功能的路由器,elixir,plug,Elixir,Plug,我正在尝试用Elixir建立一个非常简单、基本的HTTP API。我认为使用Phoenix做这样的事情完全是过火了,所以我想简单地使用Plug。我可以这样设置一个基本路由器: defmodule Example.Router do use Plug.Router plug Plug.Logger plug :match plug :dispatch get "/" do data = do_something_with_conn(conn) se
defmodule Example.Router do
use Plug.Router
plug Plug.Logger
plug :match
plug :dispatch
get "/" do
data = do_something_with_conn(conn)
send_resp(conn, 200, Poison.encode!(data))
end
match _, do: send_resp(conn, 404, "Not Found")
end
然而,我不知道如何将这个路由器连接到另一个插件功能。比如说,我在某个地方有一个与插件兼容的功能:
defmodule RandomPlug do
import Plug.Conn
def random_plug(conn, opts) do
whatever(conn)
end
end
如何将其连接到路由器?我已尝试使用以下语法:
和其他变体,但我无法让它编译和/或工作。例如,上面的版本抱怨没有随机插件/0函数
是的,我可以让它与整个插件模块一起工作(使用
init
和call
),但我想知道如何让它与函数一起工作。也许这会让我更好地理解一些长生不老药的细节,根据文档,这应该是可能的。我只是阅读了Plug.Builder
的源代码,没有找到在Plug
中指定模块和函数名组合的方法。它(在这种情况下,它将调用module.init/2
)。但是,您可以从模块导入
函数,然后将导入的函数视为本地函数:
defmodule Example.Router do
use Plug.Router
...
import RandomPlug
plug :random_plug
end
defmodule Example.Router do
use Plug.Router
...
import RandomPlug
plug :random_plug
end