wake-up-neo.net

pg.connect keine Funktion?

Es scheint eine Menge Dokumentation zu geben (z. B. https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-node-js , aber auch an anderer Stelle einschließlich dieser Site), die die richtige Methode angibt zum Verbinden mit dem pg.js Node-Paket verwendet pg.connect. Ich habe jedoch (nach früheren Problemen mit meinem aktuellen Code) versucht, den genauen Code zu verwenden, der in der oben genannten Heroku-Dokumentation angegeben ist:

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));
    });
});

Und ich habe die Fehlermeldung "pg.connect ist keine Funktion". Was ist los und wie kann ich das beheben?

15
user1837296

Eine neue Version von pg, nämlich 7.0.0, wurde vor ungefähr 15 Stunden veröffentlicht (seit ich dies schreibe).

Diese Version enthält viele Änderungen. Eine davon ist, dass pg.connect zugunsten von pg.Pool(...).connect(...) schwer veraltet (mit anderen Worten: entfernt) wurde, wie hier beschrieben: https://node-postgres.com/guides/upgrading

Die neue Verbindungsmethode sieht folgendermaßen aus:

var pool = new pg.Pool()

// connection using created pool
pool.connect(function(err, client, done) {
  client.query(/* etc, etc */)
  done()
})

// pool shutdown
pool.end()

Viele ältere Dokumentationen spiegeln diese Änderungen nicht wider, sodass der von ihnen verwendete Beispielcode nicht mehr funktioniert.

Sie können den Beispielcode entweder versuchen und neu schreiben, damit er in 7.0.0 funktioniert, oder explizit eine ältere Version installieren, die weiterhin mit dem Beispielcode funktioniert:

npm install [email protected]
28
robertklep

pg: postgresql => ( https://www.npmjs.com/package/pg )

pg.connect ist seit Version 6.3 veraltet ❌ 

Stattdessen gibt es eine andere Methode namens pool

So können Sie node-postgres einfach mit express einrichten.

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');
});

Weitere Informationen finden Sie unter: http://www.javascriptpoint.com/nodejs-postgresql-tutorial-example/

9
Djamal Dagirov

Wenn Sie sich an den Code halten möchten, den Sie haben, können Sie eine ältere Version von Postgres verwenden.

Zuerst bewerben:

npm uninstall postgresql

und installieren Sie dann Version 6.1.2 (die mit dem von Ihnen genannten Code kompatibel ist):

npm install [email protected]
1
Keval Bhogayata
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;

0