本地PostgreSQL+Express连接报错:服务器不支持SSL连接
解决本地PostgreSQL连接Express API时的SSL错误
问题核心
本地PostgreSQL默认未启用SSL,但你的代码全局强制开启了SSL配置,导致连接时数据库不支持SSL而报错。
修复步骤
1. 调整数据库连接的SSL配置,区分开发/生产环境
修改db.js,仅在生产环境启用SSL,本地开发时关闭:
const { Pool } = require("pg"); const pg = require("pg"); require("dotenv").config(); // 仅生产环境启用全局SSL pg.defaults.ssl = process.env.NODE_ENV === "production"; const connectionString = process.env.NODE_ENV === "production" ? process.env.DATABASE_URL : `postgresql://${process.env.PG_USER}:${process.env.PG_PASS}@${process.env.PG_HOST}:${process.env.PG_PORT}/${process.env.PG_DATABASE}`; const conn = new Pool({ connectionString: connectionString, // 生产环境才配置SSL,开发环境自动禁用 ssl: process.env.NODE_ENV === "production" ? { rejectUnauthorized: false } : false }); module.exports = conn;
2. 修复API接口中的额外bug
你的index.js里还有两个会导致报错的问题,一并修复:
app.get("/apiv1/:tier", async (req, res) => { try { // 路由仅定义了tier参数,去掉不存在的date解构 const { tier } = req.params; // 补充排序字段(示例用date,可根据你的表结构调整) const allData = await pool.query( "SELECT * FROM previous WHERE tier=$1 ORDER BY date DESC LIMIT 25;", [tier] ); const results = allData.rows; console.log(results); // 记得返回响应,避免客户端等待超时 res.json({ data: results }); } catch (error) { console.log(error.message); // 错误时返回500状态码和错误信息 res.status(500).json({ error: error.message }); }; });
3. 验证本地PostgreSQL配置(可选)
如果修改后仍有问题,检查本地PostgreSQL的postgresql.conf文件:
- 确保
ssl = off(默认即为该配置,本地开发无需开启) - 重启PostgreSQL服务
内容的提问来源于stack exchange,提问作者nos codemos
相关产品推荐
相关产品推荐

