我正在与 Phoenix 一起在 Elixir 中开发一个简单的网站。我想添加一些在生成响应后运行的自定义中间件。例如,为了记录每个响应中的总字节数,我想要一个这样的 Plug
defmodule HelloWeb.Plugs.ByteLogger do
import Plug.Conn
require Logger
def init(default), do: default
def call(conn, default) do
log("bytes sent: #{String.length(conn.resp_body)}")
end
end
尝试在路由器中的一个 Phoenix 管道中使用这个插件是行不通的,它们都在响应呈现之前运行。相反,它会导致一个FunctionClauseError
since conn.resp_body
is nil
。我不确定如何使用此插件,以便在呈现响应后运行它。