2017-05-29 3 views
0

Ich möchte alle Datensätze von Redis zu einer Ansicht übergeben. Ich denke, ich mache etwas falsch mit den Redis-Werten, weil ich es nicht zu Array oder Objekt schieben kann.Wie alle Redis-Datensätze zur Ansicht übergeben werden?

Ich habe versucht, so zu mögen:

app.get('/', function (req, res, next) { 
var items = []; 
    client.keys('*', function (err, obj) { 

    for (var i = 0, len = obj.length; i < len; i++) { 

     client.hgetall(obj[i], function (err, value) { 
      if(typeof value === 'object'){ 
       items.push(value); 
      } 

     }); 

    } 
    console.log(items); // returns empty array 

}); 

    res.render('searchusers'); // need to pass the object here 
}); 

Wenn ich den Wert i

for (var i = 0, len = obj.length; i < len; i++) { 

     client.hgetall(obj[i], function (err, value) { 
      console.log(value); 

     }); 

    } 
------------ Result-------------- 

{ first_name: 'john123', 
    last_name: 'foofoo', 
    email: '323233', 
    phone: 'foo' } 

Wert offensichtlich ein Objekt erhalten Konsolprotokoll ... brauche ich ein zu tun für Schleife über seine Werte? oder vielleicht gibt es einen einfacheren Weg dazu.

Antwort

1

Das ist, weil Sie async Anruf los haben, versuchen Sie diesen Code:

app.get('/', function (req, res, next) { 
    var items = []; 
    client.keys('*', function (err, obj) { 
     const hGetAll = function(i){ 
      if(obj[i]){ 
       client.hgetall(obj[i], function (err, value) { 
        if(typeof value === 'object'){ 
         items.push(value); 
        } 
        hGetAll(i+1); 
       }); 
      }else{ 
       console.log(items); 
       // res.json(items); for JSON response 
       res.render('searchusers', items); 
      } 
     } 
     hGetAll(0); 
}); 

ich es nicht getestet, aber es sollte funktionieren. Sie können es auch mit Hilfe von Versprechen lesbarer machen.

+0

Danke - ich erhalte einen Fehler = _http_outgoing.js: 356 werfen neuen Fehler ('kann Header nicht setzen, nachdem sie gesendet werden.'); ^ Fehler: Header können nach dem Senden nicht festgelegt werden. – RoyBarOn

+0

Entfernen Sie 'res.render' von Ihrem Code, wenn es einen gibt –

+0

Ich tat - wie kann ich die Daten an die Ansicht weitergeben? – RoyBarOn

Verwandte Themen