无法在node.js中显示行计数

时间:2014-02-01 16:35:24

标签: javascript node.js postgresql console

我正在尝试在node.js中运行以下代码来显示postgresql数据库中的表数:

var pg = require('pg'); 
var conString = "postgres://login:pwd@localhost/DB";
var client = new pg.Client(conString);

client.connect(function(err) {
    if (err) {
        console.error('Could not connect to DB', err);
    } else {
        console.log('Could connect to DB');
        client.query("SELECT * FROM pg_catalog.pg_tables", function(err, result) {
            if (err) {
                console.error('Error with table query', err);
            } else {
                var cnt = result.rows.length;
                console.log("Row count: " + cnt.toString());
            }
        });
        console.log('After query');
        client.end();
    }
});

不幸的是,控制台中只显示以下内容:

Could connect to DB
After query

为什么不显示行数?我怎样才能找出问题所在?

1 个答案:

答案 0 :(得分:1)

由于client.query是异步的,因此在查询有机会返回结果之前将调用client.end()

尝试将异步函数中的client.end()移动到client.query。然后它只会在result.rows被记录到控制台之后被调用,如下所示:

client.connect(function(err) {
    if (err) {
        console.error('Could not connect to DB', err);
    } else {
        console.log('Could connect to DB');
        client.query("SELECT * FROM pg_catalog.pg_tables", function(err, result) {
            if (err) {
                console.error('Error with table query', err);
            } else {
                var cnt = result.rows.length;
                console.log("Row count: " + cnt.toString);
                client.end();
                console.log('After query');
            }
        });
    }
});