5
プラグインを作成するにはどうすればよいですか? content-type
がtext/plain
の場合は、応答のbody
を大文字に変換しますか?他のミドルウェアではresp = next(conn, params)
と呼んでresp
を修正しましたが、プラグでは見たことがありません。プラグインを使用してコントローラレスポンスを後処理する
プラグインを作成するにはどうすればよいですか? content-type
がtext/plain
の場合は、応答のbody
を大文字に変換しますか?他のミドルウェアではresp = next(conn, params)
と呼んでresp
を修正しましたが、プラグでは見たことがありません。プラグインを使用してコントローラレスポンスを後処理する
register_before_send/2を使用するプラグを定義し、応答のcontent-type
ヘッダーをチェックすることができます(プラグはヘッダーを小文字にすることに注意してください)。ナイーブな実装(エラーチェック)は次のようになります。
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
は、無限ループが発生します
send_resp/3として使用されていると、あなたのサーバーを再起動する必要があります。