0

在我的 Node 应用程序中,我想连接到 postgresql 数据库以对实体进行一些工作。但我无法让它与 Node.js 一起使用。我已经使用 psycopg2 从 Python 脚本成功连接并查询了数据库,所以我知道连接部分可以工作。

var DB_URL = "postgres://admin@localhost/mydb_development"
var db = new pg.Client(DB_URL);
db.connect();

.... more stuff here ....    


app.get('/test', function(request, response) {
  response.setHeader('Content-Type', 'text/plain');
  response.write("First!\n");
  var i = 0;
  var query = db.query("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'", []);
  query.on('row', function(row) {
    console.log(row['table_name']);
    i++;
    response.write(String(row['table_name']) + "\n");
  });
  response.write("\nHello db; variable i=" + i + "!");
  response.end();
});

我发现 console.log(row['table_name']) 成功地将表名输出到控制台。但是,看起来响应变量和 i 在闭包内都不可用......那么我到底应该如何获得查询的结果来处理它?!

4

1 回答 1

1

response变量可用但不可写,因为您已经end对其进行了编辑。 i也应该可用,但是在您将其写入响应时,它尚未增加。

在获得所有行之后,您可能想要end它(并写最后一行)。可以这样实现:

var DB_URL = "postgres://admin@localhost/mydb_development"
var db = new pg.Client(DB_URL);
db.connect();

.... more stuff here ....    


app.get('/test', function(request, response) {
  response.setHeader('Content-Type', 'text/plain');
  response.write("First!\n");
  var i = 0;
  var query = db.query("SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'", []);
  query.on('row', function(row) {
    console.log(row['table_name']);
    i++;
    response.write(String(row['table_name']) + "\n");
  });
  query.on('end', function () {
      response.write("\nHello db; variable i=" + i + "!");
      response.end();
  });
});
于 2012-07-05T06:21:23.793 回答