2016-10-26 5 views
0

pg-pool으로 Postgres DB에 연결을 풀링 중입니다. 그러나 프런트 엔드에 쿼리 결과를 보내는 데 문제가 있습니다. 평소와 같이 res.send을 사용할 수 있다고 가정했으나 인식되지 않았습니다 (나는 또한 return을 시도했습니다). 여기 제 기능입니다 :node-postgres, pg-pool로 표현, 데이터를 Angular 프론트 엔드로 보내기

exports.featList = function (req, res) { 
pool.connect(function(err, client, done) { 
    if (err) { 
    return console.error('error fetching client from pool', err); 
    } 
    client.query('SELECT * FROM book WHERE featured=true', function (err,res) { 
    var json = JSON.stringify(res.rows); 
    return json; 
    client.release(); 
}); 
}); 

답변

0

그 때문에 콜백의 결과를 반환하지 않습니다 보인다 client.query는 응답 오브젝트에 액세스 할 수 있도록이 입술 변수를 재 선언한다. 당신이 결과를 고해상도에서이 변수의 이름을 바꿀 경우는 클라이언트로 결과를 반환 할 수 있습니다 :

exports.featList = function (req, res) { 
    pool.connect(function (err, client, done) { 
    if (err) { 
     return console.error('error fetching client from pool', err); 
    } 
    client.query('SELECT * FROM book WHERE featured=true', function (err, results) { 
     var json = JSON.stringify(res.rows); 
     res.json(json); 
     client.release(); 
    }); 
    }); 
} 
+0

죄송합니다, 감사합니다, 나는 실제로 단지 (오른쪽 실제 코드에 있었다) 것으로 잘못 입력. 내 문제가 'client.query' 내에 보내는 코드를 포함한다고 생각하기 시작했습니다. 내가 믿는 바깥으로 나가야합니다. – eabates

+0

@는 모든 요청에 ​​대해 연결을 생성해서는 안되며 미들웨어에 존재해서도 안되기 때문에 접근법이 잘못되었다고 생각합니다. 'pool.connect' 파일을 데이터베이스 커넥터가 될 다른 파일/lib로 옮기고 응용 프로그램을 부팅하여 db에 연결해야합니다. 이 파일/lib에는 필요할 때 클라이언트를 반환하는 함수가 있어야합니다 (미들웨어의 경우) –

+0

사실 저는'res.send' 전에'client-release'를해야했습니다. – eabates