gpt4 book ai didi

elixir - 从插头内调用插头

转载 作者:行者123 更新时间:2023-12-04 22:43:07 27 4
gpt4 key购买 nike

我有一些插头,每次都会调用。我想创建一个插件,为我调用所有这些插件。我该怎么做?

这是我目前尝试做的:

defmodule MyApp.SpecialPlug do
import Plug.Conn

def init(default), do: default

def call(conn, default) do
plug SimplePlug1
plug SimplePlug2, args: :something
end
end

但它抛出一个 CompileError ,说: undefined function plug

最佳答案

您可以简单地使用 Plug.Builder 为了这:

defmodule MyApp.SpecialPlug do
use Plug.Builder

plug SimplePlug1
plug SimplePlug2, args: :something
end

这将定义 initcall自动将依次通过 connSimplePlug1然后 SimplePlug2 .

如果你真的想手动调用一个插件,你可以这样做:
defmodule MyApp.SpecialPlug do
def init({opts1, opts2}) do
{SimplePlug1.init(opts1), SimplePlug2.init(opts2)}
end

def call(conn, {opts1, opts2}) do
case SimplePlug1.call(conn, opts1) do
%Plug.Conn{halted: true} = conn -> conn
conn -> SimplePlug2.call(conn, opts2)
end
end
end

请注意,您必须添加对 halted: true 的检查。如上所述(除非您出于某种原因想忽略暂停)。 Plug.Builder自动为你做同样的事情

获得相当于:
plug SimplePlug1
plug SimplePlug2, args: :something

你现在可以这样做:
plug MyApp.SpecialPlug, {[], [args: :something]}

关于elixir - 从插头内调用插头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39700000/

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