TypeError:当用Heroku node.js调用pg.connect时,无法调用null的方法'query'

我遇到了通过Node.js连接到Heroku postgres数据库的问题。 我发现另外一个人遇到这个问题,但他们的build议在我的情况下不起作用。

我将var DB_URL定义为Heroku存储的完整Postgres数据库URL。 我这样做是因为process.env.DATABASE_URL没有定义。 (这是其他堆栈溢出post的build议)。

尝试连接的代码是:

pg.connect(DB_URL, function(err, client) { client.query( ... ) 

跑步领class时:

 client.query('INSERT INTO bookmarks (username, title, image, url) VALUES ( ^ TypeError: Cannot call method 'query' of null 

null的地方是指客户端对象,意思是传递给pg.connect匿名函数。

build议表示赞赏,我在Heroku文档和Googlesearch引擎中search到了很多,但都无济于事。

我与我的网站有同样的问题,更令人沮丧的是,它在部署的网站上工作,但当我试图在本地运行网站(使用工头),我得到了这个错误。 从错误我明白,我无法连接到数据库,从进一步检查这些是造成这个错误的两个原因:

  1. 没有DATABASE_URL环境variables
    出于某种原因,我没有在我的.env文件中设置process.env.DATABASE_URL ,虽然它在远程站点上设置正确。 要解决这个问题,你可以运行“heroku config”,把所需的DATABASE_URL复制到本地.env文件(如果这个文件不存在,创build一个)。
    重要注意:复制粘贴时,variables会将“:”字符更改为“=”。

  2. ?ssl = true不是DATABASE_URL的一部分
    由于上述修复,客户端现在知道连接的位置,但由于身份validation问题仍然无法打开连接。 通过添加?ssl = true到DATABASE_URL它终于为我解决了这个问题。 看起来,当您尝试从远程站点(heroku服务器)连接时,您不需要传递参数,但是当您尝试从本地计算机连接到数据库时,需要使用此身份validation才能正确连接。

希望它会有所帮助。

我不是很熟悉你连接到数据库的方式,但是这里是我如何去做的。 也许你可以尝试这个作为替代。 这对我有用。

 var pg = require('pg'); // Get your USER, PW (password) , HOST, PORT, and DATABASE variables from heroku // so that you can put them in your connection string. var conString = "pg://" + USER + ":" + PW + "@" + HOST + ":" + PORT + "/" + DATABASE + "?ssl=true"; var client = new pg.Client(connString); // Now you can start querying your database. Here is a sample. client.connect(function(err) { if (err) { return console.error('could not connect to postgresq',err); } var query = "SELECT fieldName FROM \"Users\" where username='" + username + "';" client.query(query, function(err, result) { if (err) { return console.err("could not complete query", err); } client.end(); console.log(result.rows[0].fieldName); }); })