gpt4 book ai didi

web-services - Elixir - Simple Plug 示例在每次请求时两次调用调用方法

转载 作者:可可西里 更新时间:2023-11-01 15:20:54 24 4
gpt4 key购买 nike

以下代码主要基于此处的示例:

http://hexdocs.pm/plug/

唯一真正的区别是增加了一个主管:

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 提示符 IO.puts 'Log Response' 每个 http 请求两次...

是什么原因造成的?

最佳答案

在本地测试后,我认为第一个请求是一个网站图标。您可以看到,如果您添加 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

请注意,[] 代表/ 路径。

关于web-services - Elixir - Simple Plug 示例在每次请求时两次调用调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29613076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com