如何创建插件,例如如果body
为content-type
,则将回复的text/plain
变为大写?在其他中间件中,您可以拨打resp = next(conn, params)
然后修改resp
,但我还没有看到插件。
答案 0 :(得分:12)
您可以定义使用register_before_send/2的插件并检查响应的content-type
标头(请注意,Plug期望标头为小写)。一个天真的实现(没有错误检查)将是:
defmodule Plug.UpperCaser do
@behaviour Plug
import Plug.Conn
def init(opts), do: opts
def call(conn, _opts) do
register_before_send(conn, fn(conn) ->
[content_type | _tail] = get_resp_header(conn, "content-type")
if String.contains?(content_type, "text/plain") do
resp(conn, conn.status, conn.resp_body |> to_string |> String.upcase)
else
conn
end
end)
end
end
resp/3用作send_resp/3会导致无限循环,您必须重新启动服务器。