在Redis中使用快速会话时NodeJS中出现错误

我在Node.js中有一个项目,我从express-session中使用了MemoryStore,但是当我更改为使用redis(connect-redis)的会话时,在访问任何页面时收到错误ERR错误的“set”并且无法login(因为会话未创build,或者创build不正确)。

试图find为什么发生这种情况,我创build了一个简单的项目,看看是什么导致了错误,但即使经过大量的search,我找不到原因。 我遵循https://github.com/tj/connect-redis中的说明,并在https://stackoverflow.com/上看到了很多示例,但错误仍在发生。 我以更多的方式进行testing(注释行和其他),但仍然在发生。 只有在访问一个页面( localhost:3000 ,这个testing中只有这个页面)时才会发生,而不是在服务器启动时。


package.json文件:

 { "name": "test", "description": "Test", "version": "0.0.1", "private": false, "scripts": { "start": "node app.js" }, "dependencies": { "express": "^4.13.1", "express-load": "^1.1.15", "express-session": "^1.13.0", "cookie-parser": "^1.4.1", "redis": "^2.4.2", "connect-redis": "^3.0.2", "ejs": "^2.4.1" } } 

app.js文件:

 const SECRET = 'test'; var express = require('express') , load = require('express-load') , expressSession = require('express-session') , cookieParser = require('cookie-parser') , cookie = cookieParser(SECRET) //, cookie = cookieParser() , redis = require('redis') , RedisStore = require('connect-redis')(expressSession) //, redisClient = redis.createClient() , redisClient = redis.createClient({host: '127.0.0.1', port: '6379'}) , store = new RedisStore({client: redisClient}) //, store = new RedisStore({host: '127.0.0.1', port: '6379'}) //, store = new expressSession.MemoryStore() , session = expressSession({ store: store, secret: SECRET, resave: true, saveUninitialized: true }) , app = express() , server = require('http').Server(app) ; app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use(cookie); app.use(session); load('controllers') .then('routes') .into(app) ; server.listen(3000, function() { console.log('Testing...'); }); 

如果我评论, store = new RedisStore({client: redisClient})并取消注释, store = new expressSession.MemoryStore() ,我没有收到错误,它会与会话正常工作。 这个testing项目非常简单,我发现这个错误仍然发生,当我像我看到的许多其他例子一样做同样的事情时,我感到很奇怪。

除了node_modules外,这个testing项目只有1页/views/home/index.ejs个控制器/controllers/home.js和1个路由/routes/home.js ,但是它们非常简单,只有它们做的是引导用户到简单的页面/views/home/index.ejs ,所以错误不能在其中之一。


编辑

错误堆栈跟踪:

 [path]\test>npm start > test@0.0.1 start [path]\test > node app.js Testing... Error: ERR wrong number of arguments for 'set' command at JavascriptReplyParser._parseResult ([path]\test\node_modules\redis\lib\parsers\javascript.js:43:16) at JavascriptReplyParser.try_parsing ([path]\test\node_modules\redis\lib\parsers\javascript.js:114:21) at JavascriptReplyParser.run ([path]\test\node_modules\redis\lib\parsers\javascript.js:126:22) at JavascriptReplyParser.execute ([path]\test\node_modules\redis\lib\parsers\javascript.js:107:10) at Socket.<anonymous> ([path]\test\node_modules\redis\index.js:131:27) at emitOne (events.js:77:13) at Socket.emit (events.js:169:7) at readableAddChunk (_stream_readable.js:146:16) at Socket.Readable.push (_stream_readable.js:110:10) at TCP.onread (net.js:523:20) 

更新您的Redis服务器版本。

https://github.com/redis/redis-rb/issues/372