You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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选项,示例代码:
    const pg = require('pg');
    const client = new pg.Client({
      connectionString: process.env.DATABASE_URL,
      ssl: {
        rejectUnauthorized: false // 兼容Heroku的自签名证书,这步很关键
      }
    });
    
    如果你用的是较新版本的pg模块,也可以直接设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:42:18