J'essaie d'apprendre à utiliser javascript pour me connecter à une base de données postgresql, mais lorsque j'essaie de consigner une requête sur la console à l'aide de query.on (...), une erreur de type indiquant "query.on n'est pas une fonction". J'ai longuement cherché à résoudre ce problème, mais je n'arrive pas à trouver de documentation sur la fonction .on. Je sais que la connexion a réussi car lorsque j'interroge la base de données du terminal, les deux nouvelles lignes ont été ajoutées.
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",
}
}
query.on
a été supprimé de node-pg 7.
Voir https://node-postgres.com/guides/upgrading pour savoir comment gérer correctement les lignes.
La méthode habituelle consiste à utiliser des promesses ou async/wait (en utilisant des promesses de manière plus claire):
await client.connect();
var res = await client.query("SELECT * FROM json_test");
res.rows.forEach(row=>{
console.log(row);
});
await client.end();
voici comment cela fonctionne pour moi:
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()
})
Comme mentionné par Denys Séguret dans Answer, la fonction query.on
est obsolète. Et si vous êtes débutant et que vous souhaitez obtenir une connexion rapide pour essayer vos requêtes sans être dérangé par les fonctionnalités async/wait. Vous pouvez essayer le code ci-dessous: -
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()
})