はじめに
ElixirにてCowboyを直接動かすための記事となります。
前回の記事では、cookieの操作を行い、cookieの追加を行いました。
今回の記事では、リクエストの中にあるcookieの情報を確認してみます。
バージョン
使用した言語やライブラリのバージョンは下記となります。
cowboy 1.0のバージョン
Version | |
---|---|
Elixir | 1.3.2 |
Erlang | 19.2 |
Cowboy | 1.0.4 |
cowboy 2.0のバージョン
Version | |
---|---|
Elixir | 1.3.2 |
Erlang | 19.2 |
Cowboy | 2.0.0-pre4 |
Cookieの情報を読み取る
今回はCookieの情報を読み取る内容となっておりますので前回のHandlerに追加でコードを記載していきます。
cowboy 1.0の場合
lib/elixir_cowboy_example/cookie_handler.ex
def handle(req, state) do
# cookiesメソッドにて全てのcookie情報を取得できる
{all_cookies, req} = :cowboy_req.cookies(req)
# cookieにて第一引数で引き渡した文字列のcookie情報を取得できる
{cookie_val, req} = :cowboy_req.cookie("hoge", req)
IO.inspect all_cookies
IO.inspect cookie_val
cookie_req = :cowboy_req.set_resp_cookie("server", "add_cookie", [
{:max_age, 3600},
{:domain, "localhost"},
{:path, "/"}
], req)
headers = [ {"content-type", "text/html"} ]
body = "push cookie"
{ :ok, reply } = :cowboy_req.reply(200, headers, body, cookie_req)
{:ok, cookie_req, state}
end
cowboy 2.0の場合
lib/elixir_cowboy_example/cookie_handler.ex
def init(req, opts) do
# parse_cookiesにて、全てのcookie情報を取得し
# parse_cookiesにて取得した情報はListで束縛されているため
# List.keyfindにて値を取得できる
all_cookies = :cowboy_req.parse_cookies(req)
cookie_val = List.keyfind(all_cookies, :hoge, 0)
IO.inspect all_cookies
IO.inspect cookie_val
# mathc_cookiesにてmatchした情報のみを取得することもできるが
# matchしなかった場合にはクラッシュするようになっている
# IO.inspect :cowboy_req.match_cookies([:hoge], req)
cookie_req = :cowboy_req.set_resp_cookie("server", "add_cookie",
%{max_age: 3600, domain: "localhost", path: "/"},
req)
header = %{"content-type" => "text/html"}
body = "push cookie"
{ :ok, reply } = :cowboy_req.reply(200, header, body, cookie_req)
{:ok, cookie_req, opts}
end
記載したコードの実行
コードの記述が完了しましたので、それでは実行していきましょう。
いつも通り iex -S mix
にて cowboy を実行していき、http://localhost:4000/cookie
にアクセスしてみましょう。
下記のように表示される
Cowboy1.0の場合
cookieメソッドにて、値を習得した場合に存在しない値を取得しようとすると:undefined
となる
iex(1)> [{"server", "add_cookie"}]
:undefined
Cowboy2.0の場合
List.keyfindにて値を取得するため、値がない場合にはnil
となる
iex(1)> [{"server", "add_cookie"}]
:nil
最後に
今回はサーバ上にてcookie情報を取得する方法を実装しました。
持っているCookie情報から処理を変える方法などもありますので、使用することもあるかとおもいますが、1.0と2.0にてメソッド名が違うため注意が必要です。
それではまた次回