gpt4 book ai didi

elixir - Plug,使用在初始化时通过 Plug.Router 语法传递的选项

转载 作者:行者123 更新时间:2023-12-04 19:53:21 24 4
gpt4 key购买 nike

我正在使用 Plug,我想了解一下。

我的代码如下所示:

defmodule Numerino.Plug do
use Plug.Router
use Plug.Debugger

plug :put_resp_content_type, "application/json"
plug :match
plug :dispatch

def init options do
IO.inspect options
options
end

get "/" do
conn
|> IO.inspect
|> send_resp(201, "world")
end

match _ do
send_resp(conn, 404, "Not found.")
end

end

在 get 内部,我需要使用 option作为参数传递。

如何访问保持相同 Plug.Router 语法的选项?

最佳答案

你还没有具体说明为什么要这样做,所以我只能给出一个笼统的答案。如果您有特定的用例,那么可能会有更好的解决方案。

您可以通过向路由器添加一个额外的插件来完成此操作,该插件将选项存储在 conn 的私有(private)存储中:

plug :opts_to_private

defp opts_to_private(conn, opts) do
put_private(conn, :my_app_opts, opts)
end

这将在您的 route 通过 conn.private.my_app_opts 访问。 :
get "/" do
conn.private.my_app_opts
|> IO.inspect

conn
|> send_resp(201, "world")
end

调度函数为 defoverridable/1所以你也可以通过重写函数来做同样的事情:
defp dispatch(conn, opts) do
conn = put_private(conn, :my_app_opts, opts)
super(conn, opts)
end

但是我发现定义了一个新函数,例如 opts_to_private清洁器。

关于elixir - Plug,使用在初始化时通过 Plug.Router 语法传递的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33078593/

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