2017-05-16 3 views
1

nicht möglich Ich versuche, Anwendungsfall von redis zu lernen. Wie jedes Tutorial vorschlägt, ist es besser, Daten zwischenzuspeichern.Verbindung mit Redis in App.get-Methode

Ich habe eine einfache Demo gemacht, wo ich versuche, mit redis Server in einem Web-Service get Methode zu verbinden.

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) 
}) 

Ich versuche es wie http://localhost:8080/fetch_offers auf localhost Maschine zugreifen

ich es console.log Methode ausgetestet aber nicht verbunden Nachricht drucken. Wenn ich diese Methode außerhalb der app.get... mache, wird sie beim Ausführen von node app.js ausgedruckt.

Ich möchte es eine redis Verbindung beim Treffen einer URL machen. Ich bin mir nicht sicher, was der beste Weg ist? Kann mir jemand helfen ?

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) 
}) 

Was falsch mache ich hier?

Antwort

1

Es wird keine Verbindungsnachricht gedruckt, da das Ereignis gut abfeuert, bevor Sie den Endpunkt berühren - an diesem Punkt wird nichts mehr abgefragt und es geht verloren. Probieren Sie etwas wie folgt aus:

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); 
}); 

und dann in der Route-Handler können Sie ping verwenden, um zu sehen, wenn Sie miteinander verbunden sind:

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

Es wäre etwas einfacher, wenn Sie promise-redis verwenden und Asynchron/await :

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

Ich sehe, dass oben Programm versucht, Verbindung mit Redis-Server im Falle einer Verbindung verloren wieder herzustellen. Welche Methode macht das? –

+0

@Williams Das Modul 'redisis' erledigt das automatisch. Siehe die Dokumentation: https://github.com/NodeRedis/node_redis#reconnecting – rsp

+0

Ah, das ist perfekt –

Verwandte Themen