Il semble y avoir beaucoup de documentation (par exemple https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-node-js , mais aussi ailleurs, y compris sur ce site) de la connexion avec le package de nœud pg.js utilise pg.connect. Cependant, j'ai essayé (après des problèmes précédents avec mon code actuel) de tester en utilisant le code exact indiqué sur la documentation Heroku susmentionnée:
var pg = require('pg');
pg.defaults.ssl = true;
pg.connect(process.env.DATABASE_URL, function(err, client) {
if (err) throw err;
console.log('Connected to postgres! Getting schemas...');
client
.query('SELECT table_schema,table_name FROM information_schema.tables;')
.on('row', function(row) {
console.log(JSON.stringify(row));
});
});
Et j'ai eu le message d'erreur "pg.connect n'est pas une fonction". Que se passe-t-il et comment puis-je résoudre le problème?
Une nouvelle version de pg
, à savoir 7.0.0, a été publiée il y a environ 15 heures (à partir du moment où j'écris ceci).
Cette version comporte de nombreux changements, l’un d’eux étant que pg.connect
est devenu obsolète (en d’autres termes: supprimé) en faveur de pg.Pool(...).connect(...)
, comme indiqué ici: https://node-postgres.com/guides/upgrading
La nouvelle méthode de connexion ressemble à ceci:
var pool = new pg.Pool()
// connection using created pool
pool.connect(function(err, client, done) {
client.query(/* etc, etc */)
done()
})
// pool shutdown
pool.end()
Une grande partie de la documentation ancienne ne reflétera pas ces modifications, de sorte que l'exemple de code qu'elles utilisent ne fonctionnera plus.
Vous pouvez soit essayer de réécrire l'exemple de code pour qu'il fonctionne dans la version 7.0.0, soit installer explicitement une version antérieure qui fonctionnera toujours avec l'exemple de code:
npm install pg@6
pg
: postgresql => ( https://www.npmjs.com/package/pg )
pg.connect
est déconseillé depuis la version 6.3
Au lieu de cela, il existe une autre méthode appelée pool
Voici comment vous pouvez configurer node-postgres
facilement avec express
.
const pg = require('pg');
const express = require('express');
const app = express();
const config = {
user: 'postgres',
database: 'YOURDBNAME',
password: 'YOURPASSWORD',
port: 5432
};
// pool takes the object above -config- as parameter
const pool = new pg.Pool(config);
app.get('/', (req, res, next) => {
pool.connect(function (err, client, done) {
if (err) {
console.log("Can not connect to the DB" + err);
}
client.query('SELECT * FROM GetAllStudent()', function (err, result) {
done();
if (err) {
console.log(err);
res.status(400).send(err);
}
res.status(200).send(result.rows);
})
})
});
app.listen(4000, function () {
console.log('Server is running.. on Port 4000');
});
Veuillez consulter: http://www.javascriptpoint.com/nodejs-postgresql-tutorial-example/ pour plus d'informations
Si vous souhaitez conserver le code que vous avez, vous pouvez utiliser une version plus ancienne de Postgres.
Tout d'abord, appliquez:
npm uninstall postgresql
puis installez la version 6.1.2 (compatible avec le code que vous avez mentionné):
npm install [email protected]
var express = require('express');
var app = express();
const pgp = require('pg-promise')();
var connectionString = "";
var parse = require('pg-connection-string').parse;
try {
var connectionString = "postgres://USERNAME:@localhost:5432/DBNAME";
var config = parse(connectionString);
config.password = "PASSWORD";
var dbcon = pgp(config);
app.set('dbCon', dbcon);
}
catch (error) {
console.log("DB error")
}
module.exports = app;