LoginSignup
0
0

More than 5 years have passed since last update.

ElixirからCowboy 1.0と2.0を使ってみる Part 9

Last updated at Posted at 2017-01-14

はじめに

ElixirにてCowboyを直接動かすための記事となります。
前回の記事では、cookieの操作を行い、cookieの追加を行いました。
今回の記事では、リクエストの中にあるcookieの情報を確認してみます。

Cowboy1.0のサンプルコードはこちらになります

Cowboy2.0のサンプルコードはこちらになります

バージョン

使用した言語やライブラリのバージョンは下記となります。

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にてメソッド名が違うため注意が必要です。
それではまた次回

参考サイト

Cowboy User Guide
Cowboy User Guide

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0