Express+mongooseでsession管理
mongooseでセッション管理
パッケージインストール
$ npm install --save mongoose $ npm install --save express-session $ npm install --save connect-mongo
プロジェクト雛形作成
$ express session
app.js
var express = require('express'); var session = require('express-session'); var MongoStore = require('connect-mongo')(session); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var index = require('./routes/index'); var users = require('./routes/users'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); var mongoose = require('mongoose'); const option = { useMongoClient: true }; mongoose.connect("mongodb://localhost/session",option); app.use(session({ secret: 'somthing secret', saveUninitialized: true, resave: true, store: new MongoStore({mongooseConnection: mongoose.connection}) })); app.use('/', index); app.use('/users', users); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app;
routers/users.js
/users へのアクセスでアクセス数をカウントする。
var express = require('express'); var router = express.Router(); /* GET users listing. */ router.get('/', function(req, res, next) { req.session.views++; console.log(req.session); res.send('respond with a resource'); }); module.exports = router;
ブラウザでアクセス
console
$ npm start > session@0.0.0 start ~/session > node ./bin/www
localhost:3000/users
sessionの viewsパラメータに書き込んだカウント数がアクセスごとに上がっていく
Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true}, views: 20 } GET /users 304 12.501 ms - -
mongodbの中身確認
views に 数字が保存されているのを確認
$ mongo MongoDB shell version v3.4.10 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.9 > use session switched to db session > db.sessions.find() { "_id" : "1V04JMJx6rsIcgAtl1LJ0ovxaho_H1aB", "session" : "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"views\":20}", "expires" : ISODate("2017-12-04T04:12:29.189Z") } >