2015-09-21 7 views

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.