web-dev-qa-db-ja.com

pg.connectは関数ではありませんか?

多くのドキュメントがあるようです(たとえば https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-node-js だけでなく、このサイトを含む他の場所でも) pg.jsとの適切な接続方法Nodeパッケージはpg.connectを使用しています。ただし、(実際のコードに関する以前の問題の後)に示されている正確なコードを使用してテストしようとしました前述のHerokuドキュメント:

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

そして、「pg.connectは関数ではありません」というエラーメッセージが表示されました。何が起こっているのですか、どうすれば修正できますか?

18
user1837296

pgの新しいバージョン、つまり7.0.0が約15時間前に公開されました(これを書いているときから)。

このバージョンには多くの変更があります。そのうちの1つは、以下に記載されているように、pg.Pool(...).connect(...)を優先してpg.connectが完全に非推奨(つまり削除)になったことです: https: //node-postgres.com/guides/upgrading

新しい接続方法は次のようになります。

var pool = new pg.Pool()

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

// pool shutdown
pool.end()

古いドキュメントの多くはこれらの変更を反映しないため、使用するサンプルコードは機能しなくなります。

7.0.0で動作するようにサンプルコードを書き直すか、サンプルコードで引き続き動作する古いバージョンを明示的にインストールします。

npm install pg@6
31
robertklep

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

pg.connectはバージョン6.3以降廃止されました

代わりに、poolという別のメソッドがあります

node-postgresexpressで簡単に。

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

参照してください: http://www.javascriptpoint.com/nodejs-postgresql-tutorial-example/ 詳細については

9
rust

持っているコードを使い続けたい場合は、Postgresの古いバージョンを使用できます。

まず、適用:

npm uninstall postgresql

次に、バージョン6.1.2(言及したコードと互換性があります)をインストールします。

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