在redis.conf中使用requirepass时,将express.js应用程序连接到redis服务器时出错

我是新来的节点和redis,并build立一个简单的服务器快递与redis通信。

启动redis-server之后,我启动节点服务器app.js

当我使用redis.conf文件而不使用requirepass时,app.js启动并运行,但是当我添加requirepass时,应用程序在启动时崩溃。 我可以在terminal运行redis-cli,密码在那里工作。

运行app.js时,我得到这个Uncaught错误堆栈:

throw e; // process.nextTick error, or 'error' event on first tick ^ Error: Uncaught, unspecified 'error' event. at RedisClient.emit (events.js:47:15) at Command.callback (/node_modules/redis/index.js:232:29) at RedisClient.return_error (/node_modules/redis/index.js:382:25) at RedisReplyParser.<anonymous> (/node_modules/redis/index.js:78:14) at RedisReplyParser.emit (events.js:64:17) at RedisReplyParser.send_error (/node_modules/redis/lib/parser/javascript.js:265:14) at RedisReplyParser.execute (/node_modules/redis/lib/parser/javascript.js:124:22) at RedisClient.on_data (/node_modules/redis/index.js:358:27) at Socket.<anonymous> (/node_modules/redis/index.js:93:14) at Socket.emit (events.js:64:17) 

以下是app.js中的相关代码

  var REDIS_PASS = "foobar"; var express = require('express'); var app = module.exports = express.createServer(); var io = require('socket.io').listen(app); var redisStore = require('connect-redis')(express); var redis = require('redis'); var rdb = redis.createClient(); rdb.auth(REDIS_PASS, function(){ console.log('connected to redis-server');}); rdb.on("error",function(err){ console.log("REDIS CLIENT ERROR:" + err + '\n\n' + err.stack); }); 

这里是redis.conf文件

  # Warning: since Redis is pretty fast an outside user can try up to # 150k passwords per second against a good box. This means that you should # use a very strong password otherwise it will be very easy to break. # #my hackerproof password: requirepass foobar 

我仍然试图让我的头在节点的asynchronous性质,所以我想也许这是一个情况下auth命令被调用之前build立到redis服务器的连接,但是当我把auth命令放入一个callback为client.on(“连接”事件我收到了同样的错误堆栈。

我想知道是否捕获exception将允许服务器扫描下地毯,并继续使用过程对象捕获它。 服务器似乎继续运行,但不会向浏览器提供任何页面,所以我猜这个例外不能被忽略。

我的问题是由configuration我的应用程序与RedisStore对象来处理会话。 在redis.conf文件中启用密码后,需要使用设置为redis.conf中密码的pass选项创buildRedisStore对象。

选项数组是这样设置的:

  var redisStoreOpts = {'pass':REDIS_PASS}; 

并且应用程序configuration中的行更改为如下所示:

  app.use(express.session({ secret: SESSION_SECRET, store: new RedisStore(redisStoreOpts) })); 

我希望这对任何遇到这个问题的人都是有用的。