ExpressでCookieを利用する方法

ExpressでCookieを扱う方法について取り上げます。「レスポンスにCookieを含める方法」と「リクエストヘッダに設定されたCookieを読み取る方法」について動作確認します。

レスポンスにCookieを含める

res.cookie

res.cookie でレスポンスにCookieを設定することができます。

app.js というファイルに以下処理を記述して動作確認します。

const express = require('express')
const app = express()

app.get('/', (req, res) => {
  res.cookie('name1', 'value1', {
    maxAge: 60000,
    httpOnly: false
  })

  res.cookie('name2', 'value2', {
    httpOnly: true
  })

  res.cookie('name3', 'value3', {
    domain: '.wakuwakubank.com',
    path: '/cookie',
    secure: true
  })

  res.json({})
})

app.listen(5000, () => console.log('Example app listening on port 5000!'))

Expressを起動させます。

$ node app.js 
Example app listening on port 5000!

curlで動作確認します。

$ curl --dump-header -  http://localhost:5000
HTTP/1.1 200 OK
X-Powered-By: Express
Set-Cookie: name1=value1; Max-Age=60; Path=/; Expires=Fri, 21 Dec 2018 00:16:05 GMT
Set-Cookie: name2=value2; Path=/; HttpOnly
Set-Cookie: name3=value3; Domain=.wakuwakubank.com; Path=/cookie; Secure
Content-Type: application/json; charset=utf-8
Content-Length: 2
ETag: W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"
Date: Fri, 21 Dec 2018 00:15:05 GMT
Connection: keep-alive

{} 

3つのCookieが設定されていることを確認できました。

res.cookie の各オプションの役割は以下ページで確認できます。

リクエストに含まれるCookieを読み取る

リクエストに含まれるCookieを読み取るために cookie-parser をExpressのMiddlewareに設定します。

cookie-parser をインストールします。

npm install --save cookie-parser

req.cookies

cookie-parser をExpressのMiddlewareに設定後、req.cookies でリクエストヘッダに設定されたCookieを読み取れます。

app.js というファイルに以下処理を記述して動作確認します。

const express = require('express')

const cookieParser = require('cookie-parser')
const app = express()

app.use(cookieParser())
app.get('/', (req, res) => {
  res.json(req.cookies)
})

app.listen(5000, () => console.log('Example app listening on port 5000!'))

Expressを起動させます。

$ node app.js 
Example app listening on port 5000!

curlで動作確認します。 -bオプション でリクエストヘッダにCookieを設定できます。

$ curl -b 'name1=value1; name2=value2' -v http://localhost:5000
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 5000 (#0)
> GET / HTTP/1.1
> Host: localhost:5000
> User-Agent: curl/7.64.1
> Accept: */*
> Cookie: name1=value1; name2=value2
> 
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Content-Type: application/json; charset=utf-8
< Content-Length: 35
< ETag: W/"23-lk0r592Lvgc2PznsTiA/LFYjXPU"
< Date: Fri, 21 Dec 2018 00:31:27 GMT
< Connection: keep-alive
< 
* Connection #0 to host localhost left intact
{"name1":"value1","name2":"value2"}* Closing connection 0

参考