如何从Express中连接Heroku PostgresQL数据库?
Express 连接 Heroku Postgres 操作指南(基于 npm pg 库)
前置确认
- 已在Heroku应用的Resources标签页绑定Heroku Postgres实例,绑定完成后Heroku会自动注入名为
DATABASE_URL的环境变量到后端运行环境,无需手动录入变量值 - Express项目已安装
pg依赖,未安装可执行npm i pg完成安装
数据库连接代码实现
生产环境推荐使用连接池获取更高的性能,参考配置代码如下:
const { Pool } = require('pg'); const pool = new Pool({ connectionString: process.env.DATABASE_URL, // Heroku Postgres 强制要求SSL连接 ssl: { rejectUnauthorized: false } }); // 连接状态监听,方便排错 pool.on('connect', () => { console.log('Heroku Postgres 连接成功'); }); pool.on('error', (err) => { console.error('数据库连接异常', err); }); module.exports = pool;
注意:如果省略SSL相关配置会直接抛出连接错误,这是Heroku Postgres的强制安全要求,不可省略
你可以在任意需要操作数据库的路由/逻辑文件中引入上述导出的pool实例,执行查询的示例如下:
// 示例路由 app.get('/api/list', async (req, res) => { try { const queryResult = await pool.query('SELECT * FROM 你的表名 LIMIT 10'); res.status(200).json(queryResult.rows); } catch (err) { console.error('查询失败:', err); res.status(500).json({msg: '数据获取失败'}); } });
本地测试可选配置
如果你需要在本地开发环境也连接Heroku的远程Postgres做测试,可以按以下步骤操作:
- 安装dotenv依赖:
npm i dotenv - 在项目根目录新建
.env文件,写入你获取到的Heroku Postgres连接字符串:DATABASE_URL=你从Heroku后台复制的数据库连接地址 - 在Express入口文件最顶部添加代码:
require('dotenv').config() - 不要将
.env文件提交到代码仓库,避免凭证泄露
部署验证
代码提交到Heroku完成部署后,可执行heroku logs --tail查看运行日志,若打印「Heroku Postgres 连接成功」且无相关报错,说明数据库连接已经正常工作。
内容的提问来源于stack exchange,提问作者Stijn Klijn
相关产品推荐
相关产品推荐

