syon

A fashion developer. Interested in life engineering.

【解決】req.session.touch is not a function

28 Nov 2018 » Node.js, Express

やりたいこと

Node.js Express にて、npm の cookie-session を使ってセッションを管理する。

エラー

        req.session.touch()
                    ^

TypeError: req.session.touch is not a function

TypeError: req.session.touch is not a function

本来ミドルウェアが session.touch を関数として呼べるはずであるが、備わっていなかった。 何らかの原因によって上書き・改変され失われたと考えられる。

原因

const session = require('express-session');
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session')

// :
app.use(session({ resave: true, saveUninitialized: true, secret: 'uwotm8' }));
app.use(cookieParser());
app.use(cookieSession({/* ... */}));
// :

検証に利用していたソースコードが Express 4 のサンプルであり、 すでに express-session というセッション用のミドルウェアを利用していた。

解決方法

// const session = require('express-session');
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session')

// :
// app.use(session({ resave: true, saveUninitialized: true, secret: 'uwotm8' }));
app.use(cookieParser());
app.use(cookieSession({/* ... */}));
// :

express-session を除去。

なお今回は問題とならなかったが、cookieParsercookieSession の app.use を実行する順番も関係してくるかもしれない。

参考記事