2013-07-03 48 views
6

無法從node-postgres中的SELECT查詢返回結果。現在,代碼塊結尾處的行是空的。這個select只是從POSTGRESQL中的一個序列返回下一個值。我知道你不能從回調中獲取結果,但是有沒有人使用node-postgres(或任何其他數據庫模塊到節點)來解決這個問題?SELECT和node-postgres的返回結果

client.connect(); 
var query = client.query("SELECT nextval(\'idgenerator\');"); 
var rows = []; 
query.on('row', function(row, res) { 
    rows.push(row); 
}); 
query.on('end', function(result) { 
    console.log(result.rowCount + ' rows were received'); 
}); 
//client.end(); 
console.log(rows); 

回答

5

你將不得不學習javascript/nodejs和事件編程。

query.on('row', function() { /*CODE*/ })意思是:「當一行被讀取時,執行CODE」。

這是異步的;所以query.on()註冊事件並返回。

So when console.log(rows)被調用,行仍然是空的,因爲在查詢中沒有觸發'行'事件。

您應該嘗試在query.on('end')事件處理程序的主體中放置'console.log(rows)'。

無處不在的代碼中,你也應該寫一些console.log。你會看到的異步的事情。

+1

謝謝。只需要完全理解javascript中的回調。 – magnudae

4

如果我們沒有調用result.addRow()方法,那麼rows數組將在結束事件中爲空。

var query = client.query("SELECT firstname, lastname FROM emps ORDER BY lastname, firstname"); 

query.on("row", function (row, result) { 
    result.addRow(row); 
}); 

query.on("end", function (result) { 
    console.log(JSON.stringify(result.rows, null, " ")); 
    client.end(); 
}); 

編號:http://nodeexamples.com/2012/09/21/connecting-to-a-postgresql-database-from-node-js-using-the-pg-module/

+0

是否有可能返回變量中的行數組而不是在控制檯中顯示? –

+1

裏面的「end」聽衆,你可以返回結果 1.調用一個回調函數 - 它將更新對請求的套接字的響應(使用socket.io) ex:callback(result); 2.使用「q」庫 ex: var q = require('q'); ... //等待查詢數據\ n queryDb(params).then(function(data){ }); ... 變種queryDb =函數(參數){ VAR推遲= q.defer(); ... query.on('end',function(result){ deferred.resolve(result.rows); }); return deferred.promise; } – abdulwadood

+0

感謝您的關注,我發現了大量的js –

相關問題