我正在尝试在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
为什么不显示行数?我怎样才能找出问题所在?
答案 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');
}
});
}
});