我已经在数据库上创建了 RDS Postgres 的实例。我正在尝试在我的 Node.js 应用程序中将它用作远程数据库。连接到数据库所需的内容包括端点、用户名、密码、端口,我已经拥有了所有这些。以下是我在 .env 文件中存储 URL 的方式:
POSTGRES_URL=postgres://<username>:<password>@<end-point>:5432/<db>
在我的节点应用程序中,我已配置数据库如下:
数据库.ts
import { Sequelize } from 'sequelize';
const dbUrl:string = process.env.POSTGRES_URL || '';
const sequelize: Sequelize = new Sequelize(dbUrl, {
dialect: 'postgres',
});
export default sequelize;
index.ts
import sequelize from "./config/database";
const connectDB = async (): Promise<void> => {
try {
await sequelize.authenticate();
console.log('DB connected successfully.');
} catch (error) {
console.error('Unable to connect to the database:', error);
}
};
//connect db then run server
connectDB().then(() => {
app.listen(process.env.PORT, (): void => {
console.log(`Server is running on port ${process.env.PORT}`);
});
});
当我运行 cmd
npm run dev
时,我收到如下错误:
original: error: no pg_hba.conf entry for host <my-ip>, user <username>, database <db>, no encryption.
at Client._connectionCallback (/<path>/node_modules/sequelize/src/dialects/postgres/connection-manager.js:196:24)
上面 <> 符号内的所有变量与 URL 中的相同。
我尝试使用以下命令通过 Ubuntu 终端运行 db:
psql --host=<end-point> --port=5432 --username=<username> --password
它要求输入密码,当我输入密码时,它会启动,没有任何错误。 问题仅出现在 Nodejs 应用程序中。
该错误意味着客户端已到达服务器,但由于某种原因身份验证失败(
pg_hba.conf
是定义如何对客户端进行身份验证的配置文件)。 PostgreSQL 为您提供此通用错误消息,以便攻击者无法收集太多信息。
您应该查看 PostgreSQL 服务器的日志;它应该包含相应的错误消息,可以提供更详细的信息。如果您在那里发现相同的错误消息,则说明其含义为:
pg_hba.conf
中没有与传入连接请求匹配的条目,因此连接被拒绝。