Jak utworzyć wtyczkę, która np. zmienia body
odpowiedzi na wielkie litery, jeśli content-type
jest text/plain
? W innych środkach, które można nazwać resp = next(conn, params)
, a następnie zmodyfikować resp
, ale nie widziałem tego w wtyczce.Przetwarzanie odpowiedzi sterownika za pomocą wtyczki phoenix
5
A
Odpowiedz
9
Można zdefiniować wtyczkę, która używa register_before_send/2 i sprawdzić nagłówek odpowiedzi content-type
(należy pamiętać, że wtyczka oczekuje, że nagłówki będą małe). Naiwny realizacja (bez sprawdzanie błędów) byłoby:
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 służy jako send_resp/3 spowoduje nieskończoną pętlę i trzeba będzie ponownie uruchomić serwer.