与 Redis 一起使用快速会话时,NodeJS 中出现错误
Error in NodeJS when using express session with Redis
我在 Node 中有一个项目.js我从 express-session 中使用了 MemoryStore,但是当我更改为将会话与 redis (connect-redis) 一起使用时,我收到错误 ERR 访问任何页面时"set"命令的参数数量错误,无法登录(因为会话未创建或创建不正确)。
为了找到发生这种情况的原因,我创建了一个简单的项目来查看导致错误的原因,但即使经过大量搜索,我也无法找到原因。我按照 https://github.com/tj/connect-redis 中的说明进行操作,并在 https://stackoverflow.com/中看到了很多示例,但错误仍在发生。我以更多方式进行了测试(注释行和其他方式),但它仍在发生。它仅在访问页面时发生(localhost:3000
,此测试中只有此页面),而不是在服务器启动时。
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()
,我没有收到错误,并且它适用于会话。这个测试项目非常简单,当我像我看到的许多其他例子一样做同样的事情时,我觉得错误仍然会发生很奇怪。
这个测试项目 - 除了node_modules - 只有 1 个页面/views/home/index.ejs
、1 个控制器/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
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- nodejs和heroku:抛出新错误(setHeader()需要“名称”和“值”');
- NodeJS错误-Can't在发送标头后设置标头
- NodeJS服务器在检索部分时返回505/404错误
- Javascript返回错误的Date值(NodeJS)
- NodeJS用Multer上传图片;错误:意外字段“”;
- 具有默认参数值的 ES6 类构造函数上的 NodeJS 错误
- 处理 nodejs 错误并提供不同自定义消息详细信息的最佳方法
- NodeJS 错误堆栈未定义
- nodejs 错误:Socket.ondata 上的解析错误
- 获取 nodejs 错误的行号
- NodeJS 错误与 connect-busboy,“类型错误:无法调用未定义的方法'on'”
- Nodejs:错误:找不到模块'html'
- NodeJS-错误:找不到指定的过程.bcrypt_lib.node
- NodeJS错误处理-使用错误代码或子类
- Nodejs错误未定义不是函数
- NodeJs错误v-host中间件
- 回调(xml-stream)中的Nodejs错误处理
- nodejs - 错误:在使用模块 gm 调整图像大小时生成 ENOENT
- Nodejs错误:协议"http:"不受支持的.预计“https:“