Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 如何连接插头。具有插头功能的路由器_Elixir_Plug - Fatal编程技术网

Elixir 如何连接插头。具有插头功能的路由器

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

我正在尝试用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)

    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