[nodejs] express session 설정.
express session 설정.
express를 이용하여 http 서버 구현중 기존의 express버전의 3.0.x 버전 때에서 동작하던
redis session store 설정 부분에 오류가 발생 하였다.
읭???
RedisStore.prototype.__proto__ = Store.prototype;
^
TypeError: Cannot read property 'prototype' of undefined
at module.exports (/home/juno/work/eapp/node_modules/connect-redis/lib/connect-redis.js:96:41)
at Object.<anonymous> (/home/juno/work/eapp/app.js:15:43)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
기존 express 3.0.4에서의 구현 코드는 아래와 같았다.
var express = require('express'); var RedisStore = require ('connect-redis')(express); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.session({ secret: 'rocksea', store: new RedisStore({ port : _config.redis.port, host : _config.redis.host, db : _config.redis.database, ttl : _config.redis.ttl }), cookie: { path : _config.cookie.path, domain : _config.cookie.domain, httpOnly : _config.cookie.httpOnly, maxAge : _config.cookie.maxAge } }));
하지만 새로운 Project에 적용하려고 했던 버전은 3.4.x 버전.
session 모듈이 따로 분리 되어서 발생한 에러였다.
Solution.
express-session 모듈을 설치 해준다.
$ npm install express-session --save
code.
var app = express(); var session = require('express-session') var RedisStore = require ('connect-redis')(session); app.use(express.cookieParser()); app.use(session({ secret: 'rocksea', store: new RedisStore({ port : config.redis.port, host : config.redis.host, db : config.redis.database, ttl : config.redis.ttl }), cookie: { path : config.cookie.path, domain : config.cookie.domain, httpOnly : config.cookie.httpOnly, maxAge : config.cookie.maxAge } }));
위와 같이 수정하니 잘 동작 하였다.
express 버전이 올라가면서 session쪽 모듈이 따로 분리되었나보다.
관련 spec을 찾아봐야 겠다.
MODIFIED 2014.03.13 : 관련 SPEC URL - https://github.com/visionmedia/connect-redis
.by rocksea