2012-05-21 4 views
0

저는 node.js와 express.js를 처음 사용합니다. 나는 이것이 다소 바보라는 것을 알고 있지만, 나는이 문제를 어떻게 해결할 지 정말로 모른다. 누군가 나를 도울 수 있기를 바랍니다.express.js에 redis 레코드를 렌더링하는 방법은 무엇입니까?

나는 Redis에 저장된 일부 정보가 있습니다.

redis 127.0.0.1:6379> hgetall "store1" 
1) "apple" 
2) "10" 
3) "banana" 
4) "15" 
5) "pear" 
6) "20" 
7) "name" 
8) "A Street" 
redis 127.0.0.1:6379> hgetall "store2" 
1) "apple" 
2) "30" 
3) "banana" 
4) "40" 
5) "pear" 
6) "50" 
7) "name" 
8) "B Street" 

이 정보를 표에 표시하려고합니다. express.js를 사용하여 다음 경로 파일을 만들었습니다.

노선/

var redis = require('redis'), 
    redisclient = redis.createClient(); 

exports.index = function(req, res){ 
    redisclient.on("error", function (err) { 
     console.log("Error " + err); 
    }); 

    var reports = []; 
    redisclient.keys("*", function(err, stores) { 
    for (var store in stores) { 
     redisclient.hgetall(store, function(err, figures) { 
     reports.push(figures); 
     }); 
    } 
    }); 

    res.render('report', { title: 'Store Report', reports: reports }); 
}; 

또한 다음 jade보기 파일을 report.js. 내가 localhost:3000/report을 열 때

보기/report.jade

h1= title 
table(class="table table-striped table-condensed") 
    thead 
    tr 
     th store 
     th apple 
     th banana 
     th pear 

    tbody 
    - each report in reports 
    !=partial('partials/record', {store:record.name, apple:record.apple, banana:record.banana, pear:record.pear}) 

보기/파셜/record.jade

tr 
    td= store 
    td= apple 
    td= banana 
    td= pear 

, 나는 내용은 없습니다 테이블 구조를 가져온다.

redis 호출이 비동기임을 이해합니다. 파일을 report.jsreport.jade 렌더링하기 전에 redis 모든 결과를 반환합니다.

누구든지이 문제를 어떻게 해결할 수 있습니까?

감사합니다.

답변

1

async 모듈을 사용해보십시오. 모든 IO 작업이 완료 될 때 콜백을 실행하여 결과를 렌더링하십시오.

비동기 README에서

코드 예제 :

async.parallel([ 
    function(){ ... }, 
    function(){ ... } 
], callback); 
관련 문제