Heroku部署站点时PostgreSQL连接失败,抛出AssertionError错误
解决Heroku托管站点的PostgreSQL TLS连接断言错误
这个错误一看就是你的Node.js应用在和Heroku PostgreSQL建立TLS连接时触发的断言失败,我帮你梳理几个大概率能解决问题的方向:
1. 修正PostgreSQL客户端的TLS配置
Heroku的PostgreSQL实例强制要求使用TLS连接,如果你的pg客户端配置里关闭了SSL,或者TLS参数设置不对,就会触发这个ERR_ASSERTION错误。
正确的配置方式应该是:
- 优先使用Heroku自动注入的
DATABASE_URL环境变量,不要手动拼接连接字符串 - 在pg客户端配置中正确设置SSL选项,示例代码:
如果你用的是较新版本的pg模块,也可以直接设置const pg = require('pg'); const client = new pg.Client({ connectionString: process.env.DATABASE_URL, ssl: { rejectUnauthorized: false // 兼容Heroku的自签名证书,这步很关键 } });ssl: true,但旧版本可能需要加上rejectUnauthorized: false才能正常连接。
2. 检查Node.js和pg模块版本兼容性
错误日志里提到的_tls_wrap.js是Node.js的核心TLS模块,2018年的部分Node.js旧版本(比如低于8.x的版本)和pg模块组合时,可能存在TLS断言的兼容性bug。
建议:
- 将Node.js升级到当时的LTS版本(比如8.x或10.x),在
package.json里指定engines字段:"engines": { "node": "8.x" } - 同时升级pg模块到最新的兼容版本,执行
npm update pg后重新部署。
3. 确认Heroku PostgreSQL附加状态
有时候数据库附加异常也会导致连接失败:
- 登录Heroku控制台,检查你的应用是否正确绑定了PostgreSQL add-on
- 用Heroku CLI执行
heroku pg:info命令,查看数据库实例状态是否正常,确认DATABASE_URL是有效的
4. 清理依赖重新部署
依赖冲突也可能引发这类底层连接问题:
- 本地删除
node_modules文件夹和package-lock.json文件 - 重新执行
npm install安装依赖 - 提交更新后的代码,重新部署到Heroku
内容的提问来源于stack exchange,提问作者sean carroll
相关产品推荐
相关产品推荐

