Elixir - Simple Plug 示例在每次请求时两次调用调用方法
Elixir - Simple Plug example hits the call method twice on each request
以下代码主要基于此处找到的示例:
唯一真正的区别是增加了主管:
defmodule MyApi.Supervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok)
end
def init(:ok) do
children = [
Plug.Adapters.Cowboy.child_spec(
:http, MyApi.BasicServer, [], [ port: 80 ]
)
]
supervise(children, strategy: :one_for_one)
end
end
这是插头本身:
defmodule MyApi.BasicServer do
import Plug.Conn
import Process
def init(options) do
IO.puts("Log Init")
options
end
def call(conn, _opts) do
IO.puts("Log Response")
conn
|> put_resp_content_type("text/plain")
|> send_resp(200, "Hello world")
end
end
当我运行应用程序iex -S mix,打开浏览器,然后点击localhost,iex为每个 http 请求提示 IO.puts 'Log Response' 两次...
是什么原因造成的?
在本地测试后,我认为第一个请求是一个网站图标。你可以看到,如果你添加 IO.inspect(conn.path_info)
- 它会输出 ["favicon.ico"]
.
您可以像这样轻松地在路径上添加匹配:
def call(conn = %{path_info: []}, _opts) do
conn
|> put_resp_content_type("text/plain")
|> send_resp(200, "Hello world")
end
def call(conn, _) do
conn
|> put_resp_content_type("text/plain")
|> send_resp(404, "Not found")
end
请注意,[]
代表 /
路径。
以下代码主要基于此处找到的示例:
唯一真正的区别是增加了主管:
defmodule MyApi.Supervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok)
end
def init(:ok) do
children = [
Plug.Adapters.Cowboy.child_spec(
:http, MyApi.BasicServer, [], [ port: 80 ]
)
]
supervise(children, strategy: :one_for_one)
end
end
这是插头本身:
defmodule MyApi.BasicServer do
import Plug.Conn
import Process
def init(options) do
IO.puts("Log Init")
options
end
def call(conn, _opts) do
IO.puts("Log Response")
conn
|> put_resp_content_type("text/plain")
|> send_resp(200, "Hello world")
end
end
当我运行应用程序iex -S mix,打开浏览器,然后点击localhost,iex为每个 http 请求提示 IO.puts 'Log Response' 两次...
是什么原因造成的?
在本地测试后,我认为第一个请求是一个网站图标。你可以看到,如果你添加 IO.inspect(conn.path_info)
- 它会输出 ["favicon.ico"]
.
您可以像这样轻松地在路径上添加匹配:
def call(conn = %{path_info: []}, _opts) do
conn
|> put_resp_content_type("text/plain")
|> send_resp(200, "Hello world")
end
def call(conn, _) do
conn
|> put_resp_content_type("text/plain")
|> send_resp(404, "Not found")
end
请注意,[]
代表 /
路径。