我正在尝试在 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
但是,我不知道如何将此路由器连接到另一个 Plug 功能。说,在某个地方我有这个插件兼容的功能:
defmodule RandomPlug do
import Plug.Conn
def random_plug(conn, opts) do
whatever(conn)
end
end
如何将它连接到路由器?我尝试使用文档中的这种语法:
forward "/", to: RandomPlug.random_plug
和其他变体,但我无法编译和/或工作。例如,上面的版本抱怨没有 random_plug/0 功能。
是的,我可以让它与整个 Plug 模块(使用init
and call
)一起工作,但我想弄清楚如何让它与一个函数一起工作。也许它会让我更好地理解 Elixir 的一些细节,根据文档应该是可能的。