2017-07-18 55 views
7

Wydaje się, że jest dużo dokumentacji (np. https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-node-js, ale także gdzie indziej włączając tę ​​stronę) wskazując, że właściwą metodą łączenia z pakietem pg.js jest użycie pg.connect. Jednak próbowałem (po wcześniejszych problemów z mojego rzeczywistego kodu) do testowania za pomocą dokładnie kod pokazany na wspomnianej dokumentacji Heroku:pg.connect nie jest funkcją?

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

I mam komunikat o błędzie „pg.connect nie jest funkcją”. Co się dzieje i jak to naprawić?

Odpowiedz

18

Nowa wersja pg, a mianowicie 7.0.0, została opublikowana około 15 godzin temu (od kiedy to piszę).

Ta wersja zawiera wiele zmian, jeden z nich jest, że pg.connect został ciężko przestarzałe (innymi słowy: usunięte) na rzecz pg.Pool(...).connect(...), co zostało udokumentowane tutaj: https://node-postgres.com/guides/upgrading

Nowa metoda łączenia wygląda jak to:

var pool = new pg.Pool() 

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

// pool shutdown 
pool.end() 

Wiele starszych dokumentów nie będzie odzwierciedlać tych zmian, więc przykładowy kod, którego używają, nie będzie już działać.

Można też spróbować przepisać kod przykładowy tak to działa w 7.0.0 lub jawnie zainstalować starszą wersję, która będzie nadal pracować z kodem Przykład:

npm install [email protected] 
1

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

pg.connect jest nieaktualna od wersji 6.3 ❌

Zamiast tego istnieje inna metoda zwana pool

Oto, jak łatwo można ustawić node-postgres przy pomocy 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'); 
}); 

Patrz: http://www.javascriptpoint.com/nodejs-postgresql-tutorial-example/ wiecej informacji