私は Express.js を勉強していて、cookie-session モジュールを使用してセッションを処理する方法を学びました。Express-Session を使用しようとしていますが、問題があります。
以前は、express-session の代わりに cookie-session を使用していましたが、memoryStore は完全に機能していました。ただし、connect-redis は cookie-session で使用できませんでした。そのため、express-session をインストールしましたが、それではストアも memoryStore も Redis も使用できません。
Redis DB は redistogo にあり、その URI は次のようになります: (セキュリティのためにマスクされていますが、これは練習のためだけです) ****f4bb@albacore.redistogo.com:10072/
ただし、「node app」を実行すると、エラーが出力されます。
私のpackage.json:
{
"name": "application-name",
"version": "0.0.1",
"author": "Me <me@gmail.com>",
"license": "MIT",
"private": true,
"scripts": {
"start": "node app"
},
"dependencies": {
"express": "4.x.x",
"cookie-parser": "1.x.x",
"express-session": "1.x.x",
"connect-redis": "2.x.x"
}
}
「npm ls」は次を示します。
├─┬ connect-redis@2.0.0
│ ├── debug@0.8.0
│ └── redis@0.10.1
├─┬ cookie-parser@1.0.1
│ ├── cookie@0.1.0
│ └── cookie-signature@1.0.3
├─┬ express@4.0.0
│ ├─┬ accepts@1.0.0
│ │ ├── mime@1.2.11
│ │ └── negotiator@0.3.0
│ ├── buffer-crc32@0.2.1
│ ├── cookie@0.1.0
│ ├── cookie-signature@1.0.3
│ ├── debug@0.8.0
│ ├── escape-html@1.0.1
│ ├── fresh@0.2.2
│ ├── merge-descriptors@0.0.2
│ ├── methods@0.1.0
│ ├── parseurl@1.0.1
│ ├── path-to-regexp@0.1.2
│ ├── qs@0.6.6
│ ├── range-parser@1.0.0
│ ├─┬ send@0.2.0
│ │ └── mime@1.2.11
│ ├─┬ serve-static@1.0.1
│ │ └─┬ send@0.1.4
│ │ ├── fresh@0.2.0
│ │ ├── mime@1.2.11
│ │ └── range-parser@0.0.4
│ ├─┬ type-is@1.0.0
│ │ └── mime@1.2.11
│ └── utils-merge@1.0.0
└─┬ express-session@1.0.3
├── buffer-crc32@0.2.1
├── cookie@0.1.2
├── cookie-signature@1.0.3
├── debug@0.7.4
├── uid2@0.0.3
└── utils-merge@1.0.0
私のapp.js:
//create express app
var http = require('http');
var express = require('express');
var app = express();
//add express-session
var session = require('express-session');
var RedisStore = require('connect-redis')(express);
app.use(session({
store: new RedisStore({
host: "redis://redistogo:e34d3***********************f4bb@albacore.redistogo.com:10072/"
})
}));
//routing
var router1 = require('./router/router1')(app);
var router2 = require('./router/router2')(app);
//Deploying server
http.createServer(app).listen(3000, function () {
console.log('Deployed!!');
});
「node app」の実行時に表示されたエラー:
luis@luis-laptop ~/www/express2 $ node app
/home/luis/www/express2/node_modules/connect-redis/lib/connect-redis.js:96
RedisStore.prototype.__proto__ = Store.prototype;
^
TypeError: Cannot read property 'prototype' of undefined
at module.exports (/home/luis/www/express2/node_modules/connect-redis/lib/connect-redis.js:96:41)
at Object.<anonymous> (/home/luis/www/express2/app.js:18:42)
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
どのセッション モジュールを使用すればよいですか? そして、どうすればRedisでセットアップできますか?