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
相关产品推荐
相关产品推荐

