
6

Phoenix: Plug.Conn cheatsheet
source link: https://devhints.io/phoenix-conn
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Plug.Conn cheatsheet
Request
conn.host # → "example.com"
conn.method # → "GET"
conn.path_info # → ["posts", "1"]
conn.request_path # → "/posts/1"
conn.query_string # → "utm_source=twitter"
conn.port # → 80
conn.scheme # → :http
conn.peer # → { {127, 0, 0, 1}, 12345 }
conn.remote_ip # → { 151, 236, 219, 228 }
conn.req_headers # → [{"content-type", "text/plain"}]
conn |> get_req_header("content-type")
# → ["text/plain"]
Updating conn
conn
|> put_req_header("accept", "application/json")
Usually only useful for tests.
#Response
Response
conn.resp_body # → "..."
conn.resp_charset # → "utf-8"
conn.resp_cookies # → ...
conn.resp_headers # → ...
conn.status # → ...
Sending responses
# Plug.Conn
conn
|> html("<html><head>...")
|> json(%{ message: "Hello" })
|> text("Hello")
|> redirect(to: "/foo")
|> redirect(external: "http://www.google.com/")
|> halt()
|> put_resp_content_type("text/plain")
|> put_resp_cookie("abc", "def")
|> put_resp_header("X-Delivered-By", "myapp")
|> put_status(202)
|> put_status(:not_found)
|> put_private(:plug_foo, "...") # reserved for libraries
|> send_resp(201, "")
Phoenix views
# Phoenix.Controller
conn
|> render("index.html")
|> render("index.html", hello: "world")
|> render(MyApp.ErrorView, "404.html")
|> put_layout(:foo)
|> put_layout(false)
|> put_view(ErrorView)
|> put_secure_browser_headers()
# prevent clickjacking, nosniff, and xss protection
# x-frame-options, x-content-type-options, x-xss-protection
|> put_new_view(ErrorView) # if not set yet
|> put_new_layout(:foo)
layout(conn)
#Other features
Other fields
conn.assigns # storage of crap
conn.owner # process
conn.halted # if pipeline was halted
conn.secret_key_base # ...
conn.state # :unset, :set, :file, :sent, :chunked
Accepts
plug :accepts, ["html", "json"]
conn |> accepts(["html", "json"])
get_format(conn) # → "html"
conn.accepts
Assigns
conn.assigns[:hello]
conn |> assign(:user_id, 100)
conn = async_assign(conn, :location, fn -> geoip_lookup() end)
await_assign(conn, :location)
Session
conn = fetch_session(conn) # or plug :fetch_session
conn = put_session(conn, :message, "new stuff we just set in the session")
get_session(conn, :message)
conn = clear_session(conn)
conn
|> put_flash(:info, "Success")
|> put_flash(:error, "Oh no")
Also available: flash
cookie
params
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK