Module Plug
defmodule JSONHeaderPlug do
def init(opts) do
opts
end
def call(conn, _opts) do
conn |> put_resp_content_type("application/json")
end
end
Slide 7
Slide 7 text
Plug’s plugs
• Plug.Parsers
• Parses request bodies
• Plug.Static
• Serves static files
• Plug.Logger
• Logs requests via Logger
• And more
Slide 8
Slide 8 text
Plug’s other modules
• Plug.Router
• Simple HTTP router
• Plug.Debugger
• Displays formatted runtime errors
• Plug.Builder
• Conveniences for working with pipelines
• And more
Slide 9
Slide 9 text
Plug composition
• Plug.Builder.plug/2
• Accumulates plugs + options to module attribute
• Attribute values seen as pipeline
• Plug.Builder.compile/3
• Expands pipeline into quoted terms
Plug composition
case Plug.Logger.call(conn, Plug.Logger.init(opts)) do
%Plug.Conn{} = c1 ->
case Plug.Head.call(c, Plug.Head.init(opts)) do
%Plug.Conn{} = c2 -> c2
_ -> :error
end
_ -> :error
end
Slide 13
Slide 13 text
Connection adapters
• Plug.Conn.Adapter
• Defines API for Plug to receive/send requests/responses via webservers
• Adapters:
• Cowboy (Plug.Adapters.Cowboy)
• Conveniences can be added to adapters, e.g.
Plug.Adapters.Cowboy.http/3