【问题标题】:NodeJs - Using redis, connect-redis with expressNodeJs - 使用 redis,用 express 连接 redis
【发布时间】:2012-08-15 19:27:41
【问题描述】:

注意 对于那些在 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-cli 并尝试手动连接来检查它是否正在运行?
  • 我按照作者的建议执行了simple.js(node simple.js),报错:Error: Redis connection to 127.0.0.1:6379 failed - connect ECONNREFUSED Error: Redis connection to 127.0. 0.1:6379 失败 - 连接 ECONNREFUSED
  • 如何启动redis?没想到安装后会做额外的事情。
  • redis.io/download ... Run Redis with: $ src/redis-server

标签: node.js express redis


【解决方案1】:

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

例如,当一个人去建立与一个 Redis 存储的连接时,一个人是告诉应用程序 Redis 服务器的位置以及它正在侦听的端口。也可以同时删除 port 指令,connect-redis 将使用远程 redis 服务器的默认端口。

在这种情况下,我建议试试这个代码 sn-p:

变化:

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

新:

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

更新:

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

这方面的一个例子是执行以下操作:

窗户:

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

请记住,仅仅因为一个人正在使用一种网络语言进行编程并不意味着一个人也没有学习网络的技术目标。

【讨论】:

    【解决方案2】:

    您似乎没有运行 redis 服务器。您对redis.io/download 有很好的解释,关于如何下载、安装和运行服务器和客户端。

    【讨论】:

      【解决方案3】:

      除了上面提到的,我想补充一下 express.session{..} 抛出以下错误,因为会话现在超出快速核心。

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

      解决方案: 添加

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

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

      【讨论】:

        猜你喜欢
        • 2013-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-21
        • 1970-01-01
        • 1970-01-01
        • 2015-02-06
        • 1970-01-01
        相关资源
        最近更新 更多