使用node-postgres从SELECT返回结果

时间:2013-07-03 06:52:25

标签: node.js postgresql rest

无法从node-postgres中的SELECT查询中获取结果。现在,代码块末尾的行为空。此选择只返回POSTGRESQL中序列的下一个值。我知道你无法从回调中检索结果,但是这里是否有人使用过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);

2 个答案:

答案 0 :(得分:7)

你必须学习javascript / nodejs和事件编程。

query.on('row', function() { /*CODE*/ })表示:“当读取行时,执行CODE”。

这是异步的;所以query.on()注册事件,然后返回。

调用

So when console.log(rows),行仍然为空,因为在查询中没有触发“row”事件。

你应该尝试在query.on('end')事件处理程序的主体中放入'console.log(rows)'。

代码中的任何地方,你也应该写一些console.log。你异步的东西。

答案 1 :(得分:4)

如果我们没有调用result.addRow()方法,则row数组在结束事件中将为空。

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/