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-parserをインストール
リクエストに含まれる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