如何在运行时调用Plug.Router宏定义的路由?
How do I call the route defined by the Plug.Router macro at runtime?
我可以手动构建一个 conn
然后像函数一样调用它们吗?如果你不明白"them"是什么意思,请看下面的代码
例如定义一条路线/ping
get "/ping" do
send_resp(conn, 200, "pong")
end
我知道可以用use Plug.Test
中的conn
函数来完成,但是是基于HTTP Client的,不是runtime函数调用,效率太低
标准方法如您所说,使用 Plug.Test.conn/3
构建一个 %Plug.Conn{}
结构,该结构将调用该路由。
所有插件都有一个 call/2
功能,这是在运行时可用的功能。
示例:
conn = Plug.Test.conn(:get, "/ping", "")
conn = YourModule.Router.call(conn, [])
get
宏在编译时 compiled 变成一个私有 match/3
函数,它本身由 call/2
函数调用并且还需要 conn
结构。因此,您必须使用 call/2
回调进行运行时测试,除非您从路由器模块内部调用 match/3
。 Plug.Test.conn/3
不使用 HTTP 客户端 - 它只是生成一个结构。我认为您对效率低下的担忧是没有根据的。
我可以手动构建一个 conn
然后像函数一样调用它们吗?如果你不明白"them"是什么意思,请看下面的代码
例如定义一条路线/ping
get "/ping" do
send_resp(conn, 200, "pong")
end
我知道可以用use Plug.Test
中的conn
函数来完成,但是是基于HTTP Client的,不是runtime函数调用,效率太低
标准方法如您所说,使用 Plug.Test.conn/3
构建一个 %Plug.Conn{}
结构,该结构将调用该路由。
所有插件都有一个 call/2
功能,这是在运行时可用的功能。
示例:
conn = Plug.Test.conn(:get, "/ping", "")
conn = YourModule.Router.call(conn, [])
get
宏在编译时 compiled 变成一个私有 match/3
函数,它本身由 call/2
函数调用并且还需要 conn
结构。因此,您必须使用 call/2
回调进行运行时测试,除非您从路由器模块内部调用 match/3
。 Plug.Test.conn/3
不使用 HTTP 客户端 - 它只是生成一个结构。我认为您对效率低下的担忧是没有根据的。