NodeJs – 使用redis,connect-redis与express

注意对于那些与Redis斗争的人,必须启动Redis服务器。 在Windows上,有一个redis发行版,请查看以下链接: https : //github.com/dmajkic/redis/downloads然后通过启动“redis-server.exe”来启动服务器。

我沿着node.js上的一个教程。 本教程使用Express和Redis。 我安装了redis和connect-redis(它们在package.json中被引用):

npm install redis connect-redis --save 

在我的server.js(只有有意义的部分):

 var express = require('express'); var http = require('http'); var app = module.exports = express(); var RedisStore = require('connect-redis')(express); var redis = require("redis").createClient(); app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); console.log('views', __dirname + '/views'); app.set('view engine', 'jade'); //jade as template engine app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.session({ secret: "kqsdjfmlksdhfhzirzeoibrzecrbzuzefcuercazeafxzeokwdfzeijfxcerig", store: new RedisStore({ host: 'localhost', port: 3000, client: redis }) })); app.use(app.router); app.use(express.static(__dirname + '/public')); }); 

错误消息:

 Express server listening on port 3000 [ERROR] Error Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED at RedisClient.on_error (D:\Programming\Screencasts\peepcode\nodejs\peepcode -069-full-stack-nodejs-i-mov\code\roland\HotPie\node_modules\redis\index.js:140: 24) at Socket.<anonymous> (D:\Programming\Screencasts\peepcode\nodejs\peepcode-0 69-full-stack-nodejs-i-mov\code\roland\HotPie\node_modules\redis\index.js:74:14) at Socket.EventEmitter.emit (events.js:88:17) at Socket._destroy.self.errorEmitted (net.js:329:14) at process.startup.processNextTick.process._tickCallback (node.js:244:9) [ERROR] Error Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED at RedisClient.on_error (D:\Programming\Screencasts\peepcode\nodejs\peepcode -069-full-stack-nodejs-i-mov\code\roland\HotPie\node_modules\redis\index.js:140: 24) at Socket.<anonymous> (D:\Programming\Screencasts\peepcode\nodejs\peepcode-0 

Express开始听3000端口,这是我所期望的。 redis错误信息提到端口6379上的连接。如果我将redisClient传递给RedisStore,会发生这种情况,这就是我理解的将Redis和RedisStore绑定在一起的做法。

我正在Windows上开发

看起来你没有运行redis服务器。 关于如何下载,安装并运行服务器和客户端,您可以在redis.io/download上find一个很好的解释。

代码提供很好,只是configuration错误。 所有需要改变的是端口号。

例如,当设置与Redis存储的连接时,会告诉应用程序Redis服务器的位置以及它正在监听的端口。 也可以一起删除端口指令,connect-redis将使用远程redis服务器的默认端口。

在这种情况下,我会build议尝试下面的代码片段:

更改:

 store: new RedisStore({ ..., port: 3000, ... }) 

新:

 store: new RedisStore({..., port: 6379, ... }) 

更新:

我忘记说netstatpingtelnet命令可以帮助你debugging哪些端口在本地打开以及服务返回到应用程序。 这两个命令将在cmd.exe / powershell和bash下执行,如果你在Linux,OSX或BSD等Unix环境中。

这方面的一个例子是执行以下内容:

视窗:

 netstat -np tcp | find "3000" netstat -np tcp | find "6379" 

Linux的:

 netstat -nlt | grep '3000\|6379' 

这样做是报告localhost:3000或localhost:6379的本地打开的端口。 如果您使用远程系统,那么您将使用ping来查看服务器是否启动,并使用像nmap这样的portscanner来发现可用的远程端口。

继所有这些之后,您可以使用以下命令启动连接:

 telnet <host> 3000 telnet <host> 6379 

请记住,只是因为人们用networking语言进行编程,并不意味着人们也没有学习networking的技术目标。

除了提到的内容之外,我想添加express.session{..}抛出以下错误,因为会话现在不在Express Core中。

 Error('Most middleware (like ' + name + ') is no longer bundled with Express an.... 

解决scheme:添加

var session = require('express-session');

并使用普通session而不是express.session