2015-04-13 11 views
5

Il seguente codice è in gran parte basato sull'esempio trovato qui:Elixir - esempio semplice plug colpisce il metodo di chiamata due volte su ogni richiesta

http://hexdocs.pm/plug/

L'unica vera differenza è l'aggiunta di un supervisore:

defmodule MyApi.Supervisor do 
    use Supervisor 

    def start_link do 
     Supervisor.start_link(__MODULE__, :ok) 
    end 

    def init(:ok) do 
     children = [ 
      Plug.Adapters.Cowboy.child_spec(
       :http, MyApi.BasicServer, [], [ port: 80 ] 
      ) 
     ] 

     supervise(children, strategy: :one_for_one) 
    end 
end 

Ecco la spina:

defmodule MyApi.BasicServer do 
    import Plug.Conn 
    import Process 

    def init(options) do 
     IO.puts("Log Init") 
     options 
    end 

    def call(conn, _opts) do 
     IO.puts("Log Response") 

     conn 
      |> put_resp_content_type("text/plain") 
      |> send_resp(200, "Hello world") 
    end 
end 

Quando eseguo l'applicazione con iex -S mix, aprire un browser, poi ha colpito localhost, i iEX IO.puts richiesta 'Log risposta' due volte per ogni richiesta HTTP ...

di ciò che provoca quella?

risposta

5

Dopo aver provato localmente, penso che la prima richiesta sia per una favicon. È possibile vedere che se si aggiunge IO.inspect(conn.path_info) - verrà emesso ["favicon.ico"].

È possibile aggiungere facilmente corrispondente sul percorso in questo modo:

def call(conn = %{path_info: []}, _opts) do 
    conn 
    |> put_resp_content_type("text/plain") 
    |> send_resp(200, "Hello world") 
end 

def call(conn, _) do 
    conn 
    |> put_resp_content_type("text/plain") 
    |> send_resp(404, "Not found") 
end 

Si noti che il [] rappresenta il percorso /.

Problemi correlati