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

使用TypeORM的Node.js应用无法连接Heroku上的PostgreSQL数据库如何解决?

报错原因

两个报错的触发逻辑如下:

  • ssl设为false:Heroku Postgres服务端强制要求客户端使用SSL连接,关闭SSL会直接被服务端拒绝,因此抛出pg_hba.conf相关的连接错误
  • ssl设为true:Heroku的数据库使用自签名证书,Node.js默认的TLS校验规则会拒绝不受信任的自签名证书,因此报自签名证书错误
解决方案

TypeORM的PostgreSQL连接配置中,ssl参数支持传入配置对象,你可以通过配置关闭自签名证书校验,同时建议区分开发、生产环境的配置,避免影响本地开发的数据库连接。
修改后的完整配置如下:

import { createConnection } from 'typeorm';
...

export const databaseConnection = async (databaseURL:string) => {
    try {
        await createConnection({
            type: "postgres",
            url: databaseURL,
            entities: [User],
            // 生产环境建议关闭 synchronize,改用迁移脚本同步表结构避免数据丢失
            synchronize: process.env.NODE_ENV !== 'production',
            ssl: process.env.NODE_ENV === 'production' 
              ? { rejectUnauthorized: false } 
              : false
        });
    } catch (error) {
        console.error('数据库连接失败:', error)
    }
};

// Heroku 开通Postgres插件后会自动注入DATABASE_URL环境变量,无需手动填写
databaseConnection(process.env.DATABASE_URL)
注意事项

生产环境务必关闭synchronize配置,该配置会自动对比实体和数据库表结构并修改表定义,可能触发数据丢失风险,建议使用TypeORM官方的Migration功能做表结构同步。

内容的提问来源于stack exchange,提问作者mykoman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:24:03