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

Node.js如何根据环境变量切换开发/生产PostgreSQL连接池?

Node.js 多环境PostgreSQL连接池配置方案

通过判断运行时环境变量动态初始化连接池即可,不需要重复声明同名变量,可自动适配本地开发和Heroku生产环境。

核心逻辑

  • 基于Node.js内置的process.env.NODE_ENV区分运行环境
  • 开发环境加载本地数据库连接参数
  • 生产环境加载Heroku平台注入的数据库连接串,配置强制要求的SSL参数
  • 单次声明pool变量,赋值后统一导出

修正后可直接运行的代码

const dotenv = require("dotenv");
dotenv.config({ path: "./config.env" });
const app = require("./index");
const Pool = require("pg").Pool;

let pool;

if (process.env.NODE_ENV === "production") {
  // Heroku生产环境配置
  pool = new Pool({
    connectionString: process.env.DATABASE_URL,
    ssl: {
      rejectUnauthorized: false,
    },
  });
} else {
  // 本地开发环境配置
  pool = new Pool({
    user: "postgres",
    host: "localhost",
    database: "postgres",
    password: "postgres",
    port: 5433,
  });
}

app.listen(process.env.PORT || 3000, () => {
  console.log(`App running in ${process.env.NODE_ENV || "development"} mode...`);
});

module.exports = pool;

使用说明

  • 本地启动服务时无需额外配置环境变量,默认走本地数据库连接
  • Heroku部署时平台会自动设置NODE_ENV=production,并注入DATABASE_URL变量,不需要手动添加配置
  • 本地需要验证生产连接逻辑时,可以通过启动命令临时指定环境:NODE_ENV=production node your-entry-file.js
  • 建议把本地数据库的账号、密码、端口等参数也放到config.env文件中通过process.env读取,不要硬编码在业务代码里,避免敏感信息泄露。

注意:Heroku Postgres强制要求SSL连接,生产环境配置中ssl.rejectUnauthorized: false为必填项,缺失会导致连接失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:31:11