在Node.js中连接Heroku Postgres数据库时出现错误

4

在我的数据库升级到10.2版本后,我似乎无法连接。

我正在使用pg 7.4.2的npm包。

需要明确的是,我已经使用相同的连接字符串连接了6个月而没有任何问题,该连接字符串末尾附加了?ssl=true。

我在使用Pool或Client进行连接时遇到了这个错误。

AssertionError [ERR_ASSERTION]: false == true
    at Object.exports.connect (_tls_wrap.js:1099:3)
    at Socket.<anonymous> (/home/e/express/testpg/node_modules/pg/lib/connection.js:94:23)
    at Object.onceWrapper (events.js:219:13)
    at Socket.emit (events.js:127:13)
    at Socket.emit (domain.js:421:20)
    at addChunk (_stream_readable.js:269:12)
    at readableAddChunk (_stream_readable.js:256:11)
    at Socket.Readable.push (_stream_readable.js:213:10)
    at TCP.onread (net.js:598:20)

我现在正在硬编码完整的Postgres连接字符串,以便不会出现环境变量问题。

我尝试在连接字符串末尾添加/删除?ssl=true,并在构造函数中添加/删除ssl:true。 我也尝试使用和不使用promises。无论是本地还是部署到Heroku上,都会出现相同的错误。

导入:

import { Pool, Client } from 'pg'

方法1:

let pool = new Pool({
  connectionString: csnew,
  ssl: true
})

pool.connect().then( client => {
  console.log('connected')
})
.catch(e=> {
  console.log(e)
})

方法2:

let pgclient = new Client({
  connectionString: csnew,
  ssl: true
})
pgclient.connect().then( () => {
  console.log('connected')
}).catch(e=> {
  console.log(e)
})
1个回答

4
那是因为v7.4.2破坏了其SSL支持。这里是未解决的问题。在问题解决之前,您需要严格使用v7.4.1。
更新:版本7.4.3修复了该问题。

降级到7.4.1对我们有用,感谢@vitaly-t。 - Adrien De Peretti
2
@647er,也许你需要在package.json中的目标版本前删除“^”。 - Adrien De Peretti
1
@647er 你要么将其包含为"^7.0.0",要么没有正确重新安装。在v7.4.2之前不存在这个问题。 - vitaly-t

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