2014-11-13 1 views
1

expressjs 응용 프로그램의 페이지 매김 기능을 사용하고 있습니다. 이 함수는 페이지 매김 매개 변수를 받고 일부 정보가있는 객체를 반환합니다. 이 중 하나는 query (postgresql db)의 총 결과입니다. 그러나 내가 실행할 때이 데이터를 제외하고는 모든 데이터가 올바르게 반환됩니다.반환되는 객체 속성 undefined (nodejs)

매김 기능 :

var Pagination = function (obj, cb) { 

    var base = require("./modulo-conn"); 
    var queryTotalReq = "SELECT COUNT(*) AS TOTAL FROM (" + obj.query + ") AS T"; 
    var objQry = { 
     db: obj.db, 
     query: queryTotalReq 
    }; 

    this.current = obj.paging.Actualpage; 
    this.next = obj.paging.Actualpage + 1; 
    this.prev = (obj.paging.Actualpage > 0) ?obj.paging.Actualpage - 1 : obj.paging.Actualpage; 

    base.query(objQry, null, function(data){ 
     this.totalPg = data[0].TOTAL; 
    }); 

    cb(this); 
}; 


var postOpt = { 
     db: 'postgres', 
     query: 'SELECT NOW() as when', 
     paging:{ 
      itemPerPage: 20, 
      Actualpage:2 
     } 
    }; 

var b = null; 

Pagination(postOpt, function(data){ 
    b = data; 
}); 

console.log(b); 

연결 dB 기능 : 언뜻

module.exports.query = function(postOpt, mongoOpt, cb){ 
if(postOpt){ 

     var conString =  "postgres://"+conn[postOpt.db].login+":"+conn[postOpt.db].passwd+"@"+conn[postOpt.db].server+":"+conn [postOpt.db].port+"/"+postOpt.db;//connection string 

     var pg = require('pg'); 

     console.log('connect to postgresql...'); 
     pg.connect(conString, function(err, client, done){ 
      if(err){ 
       console.log(err); 
       return false; 
      } 

      client.query(postOpt.query, function(err, result) { 
       done(); 
       if(err) { 
        return console.error('error running query', err); 
       } 
       cb(result.rows); 
      }); 
      done(); 
     }); 
    }else{ 
     console.log('Database type not defined or not found!'); 
    } 
}; 

답변

0

, 당신은 단지, base.query에서 CB()를 호출 할 필요가

var Pagination = function (obj, cb) { 
     var _this = this; 
     var base = require("./modulo-conn"); 
     var queryTotalReq = "SELECT COUNT(*) AS TOTAL FROM (" + obj.query + ") AS T"; 
     var objQry = { 
     db: obj.db, 
     query: queryTotalReq 
     }; 

     _this.current = obj.paging.Actualpage; 
     _this.next = obj.paging.Actualpage + 1; 
     _this.prev = (obj.paging.Actualpage > 0) ? obj.paging.Actualpage - 1 : obj.paging.Actualpage; 

     base.query(objQry, null, function(data){ 
     _this.totalPg = data[0].TOTAL; 
     cb(_this); 
     }); 
    }; 
관련 문제