2017-05-29 40 views
0

我想從Redis的所有記錄傳遞給視圖。我認爲我對redis值做了一些錯誤,因爲我無法將它推到數組或對象上。如何傳遞所有redis記錄以查看?

我試着喜歡這樣:

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

當我控制檯登錄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' } 

價值顯然是一個對象......我需要爲做循環它的值?或者也許有一種更簡單的方法來做到這一點。

回答

1

那是因爲你有異步調用回事,試試這個代碼:

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

我沒有測試它,但它應該工作。你也可以使用Promise使其更具可讀性。

+0

謝謝 - 我得到一個錯誤= _http_outgoing.js:356 拋出新的錯誤(「可以\」噸設置頭髮送之後「。); ^ 錯誤:無法設置頭髮送之後。 – RoyBarOn

+0

刪除'從你的代碼res.render'如果有任何 –

+0

我做了 - 所以,我怎麼可以將數據傳遞給視圖? – RoyBarOn