2017-05-16 7 views
1

redisの使用例を学習しようとしています。各チュートリアルでは、データをキャッシュするほうがよいことを示唆しています。app.getメソッドでredisで接続できません

ウェブサービスgetの方法でredisサーバーと接続しようとしている簡単なデモを作成しました。

var redis = require('redis'); 
var client = redis.createClient(); 
var express = require('express') 
var app = express() 

var port = process.env.PORT || 8080; // <== this is must 

app.get('/fetch_offers', function (req, res) { 
    client.on('connect', function() { 
     console.log('connected'); 
    }); 
}); 

app.listen(port, function() { 
    console.log(port) 
}) 

は私が console.logメソッドを使用してデバッグ http://localhost:8080/fetch_offers

のようなローカルホストマシン上でそれにアクセスしようとしていますが、それは接続されているメッセージを印刷しません。このメソッドをapp.get...の外に作成すると、実行時にnode app.jsが出力されます。

URLを入力するときにredis接続を作成する必要があります。私は何が最良の方法であるか分からないのですか?誰でも助けてくれますか?

var redis = require('redis'); 
var client = redis.createClient(); 
var express = require('express') 
var app = express() 

var port = process.env.PORT || 8080; // <== this is must 

client.on('connect', function() { 
    console.log('connected'); 
}); 

app.get('/fetch_offers', function (req, res) { 

}); 

app.listen(port, function() { 
    console.log(port) 
}) 

私はここで何をしていますか?

答えて

1

エンドポイントにヒットする前にイベントが発生するため、接続メッセージは表示されません。その時点では何も聞いていないため、失われます。

var redis = require('redis'); 
var client = redis.createClient(); 
client.on('connect',() => { 
    console.log('Redis connected'); 
}); 
client.on('ready',() => { 
    console.log('Redis ready'); 
}); 
client.on('error', (err) => { 
    console.log('Redis error:', err.message); 
}); 

をしてから、ルートハンドラで、あなたが接続しているかどうかを確認するためにpingを使用することができます:このような何かを試してみてください、あなたがpromise-redisおよび非同期/のawaitを使用する場合

app.get('/fetch_offers', function (req, res) { 
    client.ping((err, data) => { 
    if (err) { 
     console.log('Ping error:', err); 
     return; 
    } 
    console.log('Ping response:', data); 
    }); 
}); 

はそれが少し容易になるだろう:

app.get('/fetch_offers', async (req, res) => { 
    try { 
    console.log('Ping response:', await client.ping()); 
    } catch (err) { 
    console.log('Ping error:', err); 
    } 
}); 
+0

上記のプログラムは、接続が失われた場合にredis serverに再接続しようとしています。どのような方法でそれをやっている? –

+0

@Williams 'redis'モジュールは自動的にそれを行います。ドキュメントを参照してください:https://github.com/NodeRedis/node_redis#reconnecting – rsp

+0

ああ、これは完璧です –

関連する問題