NodeJs-使用redis,用express连接redis



注意对于那些在Redis上苦苦挣扎的人来说,Redis服务器必须启动。在windows上,有一个redis分布,请查看以下链接:https://github.com/dmajkic/redis/downloads然后通过启动"redisserver.exe"启动服务器

下面是一个关于node.js的教程。该教程使用了Express和Redis。我安装了redis并连接了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:ProgrammingScreencastspeepcodenodejspeepcode
-069-full-stack-nodejs-i-movcoderolandHotPienode_modulesredisindex.js:140:
24)
    at Socket.<anonymous> (D:ProgrammingScreencastspeepcodenodejspeepcode-0
69-full-stack-nodejs-i-movcoderolandHotPienode_modulesredisindex.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:ProgrammingScreencastspeepcodenodejspeepcode
-069-full-stack-nodejs-i-movcoderolandHotPienode_modulesredisindex.js:140:
24)
    at Socket.<anonymous> (D:ProgrammingScreencastspeepcodenodejspeepcode-0

Express开始在端口3000上侦听,这正是我所期望的。redis错误消息提到端口6379上的连接。如果我将redisClient传递给RedisStore,就会发生这种情况,据我所知,这是绑定redis和RedisStore的方法。

我正在Windows 上进行开发

提供的代码很好,只是配置错误。只需要更改端口号。

例如,当设置到redis存储的连接时,会告诉应用程序redis服务器位于何处以及它正在侦听的端口。还可以将端口指令全部删除,然后connect-reis将使用远程redis服务器的默认端口。

在这种情况下,我建议尝试以下代码片段:

更改:

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

新增:

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

更新:

我忘了说明命令netstatpingtelnet可以帮助调试哪些端口在本地打开,以及服务返回到应用程序的内容。如果您在Linux、OSX或BSD等unix环境中,这两个命令将在cmd.exe/powershell和bash下执行。

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

Windows:

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

Linux:

netstat -nlt | grep '3000|6379'

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

在所有这些之后,您将使用启动连接

telnet <host> 3000
telnet <host> 6379

记住,仅仅因为一个人在用网络语言编程,并不意味着一个人没有学习网络的技术目的。

看起来您没有运行redis服务器。在redis.io/download上,您已经很好地解释了如何下载、安装并运行服务器和客户端。

除了上面提到的内容,我想添加express.session{..}抛出以下错误,因为会话现在超出了express核心。

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

解决方案:添加

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

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

最新更新