web-dev-qa-db-ja.com

query.onは関数ではありません

Javascriptを使用してpostgresqlデータベースに接続する方法を学習しようとしていますが、query.on(...)を使用してコンソールにクエリを記録しようとすると、「query.onは関数"。私はこれを解決する方法を広範囲に検索しましたが、.on関数に関するドキュメントを見つけることができないようです。ターミナルからdbをクエリすると、2つの新しい行が追加されたため、接続が成功することを知っています。

jsontest.js

var pg = require('pg');
var conString = "postgres://[username]:[password]@localhost:5432/VONKTA1";
//username and password masked

var client = new pg.Client(conString);

client.connect();

client.query("INSERT INTO json_test (name, attributes) VALUES ('Ted', $1)", [{"age": 2, "gender": "M"}]);
client.query("INSERT INTO json_test (name, attributes) VALUES ('Sarah', $1)", [{"age": 8, "gender": "F"}]);

console.log("about to query");

var query = client.query("SELECT * FROM json_test");

query.on('row', function(row) {
    console.log(row);
});

query.on('end', function() {
    client.end();
});

package.json

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "test.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "pg": "^7.0.2",
  }
}
14
tvonk13

query.onはnode-pg 7から削除されました。

行を適切に処理する方法については、 https://node-postgres.com/guides/upgrading を参照してください。

通常の方法は、promisesまたはasync/awaitを使用することです(より明確な方法でpromiseを使用します)。

await client.connect();
var res = await client.query("SELECT * FROM json_test");
res.rows.forEach(row=>{
    console.log(row);
});
await client.end();
17
Denys Séguret

これは私にとってそれがどのように機能するかです:

var pg = require("pg");

var connectionString = {
  user: 'user',
  Host: 'Host',
  database: 'db',
  password: 'pass',
  port: 5432,
};

var pool = new pg.Pool(connectionString);

pool.connect(function(err, client, done) {

    const query = client.query(new pg.Query("SELECT * from products"))
    query.on('row', (row) => {
        console.log(row);
    })
    query.on('end', (res) => {
        // pool shutdown
        console.log("ending");
        pool.end()
    })
    query.on('error', (res) => {
        console.log(res);
    })

    done()
})

ソース: https://node-postgres.com/features/connecting

4
Houda M

AnswersのDenysSéguretが述べたように、関数query.onは非推奨です。そして、あなたが初心者で、async/await機能に煩わされることなくクエリを試すために素早く接続したい場合。以下のコードを試すことができます:-

const { Pool, Client } = require('pg')
const connectionString = 'postgresql://dbuser:[email protected]:5432/mydb'

const pool = new Pool({
  connectionString: connectionString,
})

pool.query('SELECT NOW()', (err, res) => {
  console.log(err, res)
  pool.end()
})
1
Suhas Chikkanna