티스토리 뷰

Developer

[nodejs] express session 설정.

rocksea 2014. 3. 12. 12:59

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


'Developer' 카테고리의 다른 글

[nodejs] iodocs를 이용한 rest api 정의.  (0) 2014.03.19
[nodejs] connect 3.0 업데이트.  (0) 2014.03.12
[IDL] Thrift 설치.  (0) 2014.03.11
[linux] cpu affinity.  (0) 2014.02.19
[i/o] Level Trigger, Edge Trigger  (0) 2014.02.13
댓글