2016-02-25 74 views
2

我在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) 

回答

1

更新您的Redis服務器的版本。

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

+0

感謝您的回覆,現在我解決了這個問題。我使用的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目錄。 –