2017-07-18 190 views
7

似乎有很多文檔(例如https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-node-js,但也包括此站點在內的其他地方)表明正確使用pg.js節點包進行連接的方法是使用pg.connect。不過,我試圖(後與我的實際代碼前面的問題)通過使用上述Heroku的文檔上顯示的確切的代碼進行測試:pg.connect不是一個函數?

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

pg的新版本,即7.0.0,約在15小時前發佈(從我寫這篇文章的時候開始)。

這個版本有很多的變化,他們在於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 [email protected] 
1

pg:在PostgreSQL =>(https://www.npmjs.com/package/pg因爲版本)

pg.connect已被棄用6.3❌

取而代之的被稱爲另一種方法pool

以下是如何使用express輕鬆設置node-postgres

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/更多信息