无法通过Sequelize连接AWS RDS PostgreSQL问题求助
问题:Sequelize连接AWS RDS PostgreSQL失败,pg库连接正常
我使用pg库代码可成功连接AWS RDS PostgreSQL,但换成Sequelize后出现连接错误,错误提示如下:
no pg_hba.conf entry for host "118.70.42.38", user "postgres", database "My_first", no encryption
成功的pg库连接代码
import pg from "pg"; import dotenv from "dotenv"; dotenv.config(); (async () => { try { const client = new pg.Client({ host: process.env.PG_HOST, port: process.env.PG_PORT, user: process.env.PG_USER, password: process.env.PG_PASSWORD, database: process.env.PG_DATABASE, ssl: true, }); await client.connect(); const res = await client.query("SELECT $1::text as connected", [ "Connection to postgres successful!", ]); console.log(res.rows[0].connected); await client.end(); } catch (error) { console.error("Error occurred:", error); } })();
出错的Sequelize代码
import "dotenv/config.js"; import Sequelize from "sequelize"; const dbConfig = { HOST: process.env.PG_HOST, USER: process.env.PG_USER, PASSWORD: process.env.PG_PASSWORD + "", DB: process.env.PG_DATABASE, PORT: process.env.PG_PORT, dialect: "postgres", // ssl: true, ssl: { rejectUnauthorized: false, }, }; console.log(dbConfig.USER); const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, { host: dbConfig.HOST, port: dbConfig.PORT, dialect: dbConfig.dialect, }); const db = {}; db.Sequelize = Sequelize; db.sequelize = sequelize; export default db;
问题原因及解决方案
问题出在Sequelize实例化时未传递SSL配置。pg库直接设置ssl: true即可启用加密连接,但Sequelize需要将SSL配置明确传入构造函数的options参数中。AWS RDS要求SSL连接,未配置SSL的Sequelize连接会以明文方式请求,触发pg_hba.conf的限制导致报错。
修改Sequelize实例化代码,添加SSL配置:
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, { host: dbConfig.HOST, port: dbConfig.PORT, dialect: dbConfig.dialect, // 适配Sequelize v5及以下版本 ssl: dbConfig.ssl, // 适配Sequelize v6+版本(推荐同时添加,兼容不同版本) dialectOptions: { ssl: dbConfig.ssl } });
这样配置后,Sequelize会以加密方式连接AWS RDS PostgreSQL,解决pg_hba.conf的报错问题。
内容的提问来源于stack exchange,提问作者Nghĩa Phạm
相关产品推荐
相关产品推荐

