pg.connect不是一个函数?

21

看起来有很多文档(例如 https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-node-js,但也包括此网站在内的其他地方)表明使用 pg.connect 是连接 pg.js Node 包的正确方法。然而,我尝试(在实际代码出现问题后)通过使用上述 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不是函数”。发生了什么事,我该如何解决?

4个回答

34

大约在15小时前(从我写这篇文章的时候算起),发布了一个名为7.0.0的pg新版本。

这个版本有很多更改,其中一个更改是hard-deprecated(换句话说:已经删除)pg.connect,取而代之的是pg.Pool(...).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

12

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

⚠️ pg.connect自版本6.3起已弃用 ❌

请注意:现在有另一种名为pool的方法可供使用

以下是如何轻松设置expressnode-postgres的方法。

const pg        = require('pg');
const express   = require('express');
const app       = express();

const config = {
    user: 'postgres',
    database: 'YOURDBNAME',
    password: 'YOURPASSWORD',
    port: 5432                  //Default port, change it if needed
};

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

1

如果你想继续使用现有的代码,可以使用较旧版本的Postgres。

首先,应用:

npm uninstall postgresql

然后安装6.1.2版本(与您提到的代码兼容):

npm install pg@6.1.2

0
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;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接