我在Node.js中有一個項目,我使用Express-session中的MemoryStore,但是當我更改爲使用redis(connect-redis)會話時,收到錯誤ERR錯號爲「設置」命令訪問任何頁面時,不能登錄(因爲不會創建會話,或錯誤地創建)參數。使用Redis快速會話時NodeJS中的錯誤
試圖找出爲什麼發生這種情況我創建了一個簡單的項目,看看是什麼原因造成的錯誤,但即使是大量的搜索後,我找不到原因。我跟着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
> [email protected] 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版本是2.5.3,看起來很好。但由於某些原因沒有目錄\連接,Redis的\ node_modules \ redis的,所以我不知道,如果連接-redis的試圖採取Redis的或類似的東西的舊全球版本,但問題是可能的版本通過連接-Redis的使用Redis的的(在連接-Redis的的的package.json,有「Redis的」:「^ 2.1.0」,所以也許有人試圖使用過時的Redis的?)。我剛剛刪除並重新安裝了connect-redis,它現在在2.5.3版本中有了redis目錄。 –