2013-07-03 50 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 –

相关问题