web-dev-qa-db-ja.com

NodeJs-redisを使用して、expressでredisを接続します

注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で開発しています

12
roland

Redisサーバーが実行されていないようです。 redis.io/download をダウンロードしてインストールし、サーバーとクライアントの両方を実行する方法について、適切な説明があります。

4
Mr. Goferito

提供されるコードは問題ありませんが、構成が間違っています。変更する必要があるのはポート番号だけです。

たとえば、Redisストレージへの接続をセットアップする場合、Redisサーバーが配置されている場所と、それがリッスンしているポートをアプリケーションに通知します。ポートディレクティブをまとめて削除することもできます。connect-redisはリモートredisサーバーのデフォルトポートを使用します。

この場合、次のコードスニペットを試すことをお勧めします。

変化する:

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

新着:

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

更新:

コマンドnetstatping、およびtelnetは、ローカルで開いているポートと、サービスがアプリケーションに返しているものをデバッグするのに役立つことを忘れていました。これらの2つのコマンドは、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

Web言語でプログラミングしているからといって、ネットワーキングの技術的な目的を学んでいないわけではないことを忘れないでください。

13
Dwight Spencer

言及されていることに加えて、セッションが現在エクスプレスコアから外れているため、次のエラーを_express.session{..}_スローすることを追加したいと思います。

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

解決策:追加

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

そして、_express.session_の代わりにプレーンなsessionを使用します

0
zion inc