0

私のNodeアプリでは、postgresqlデータベースに接続して、エンティティでいくつかの作業を行いたいと思っています。しかし、Nodeで動作させるのに問題があります。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 に答える