使用 sequelize ORM 连接到 node.js 上的 Amazon RDS Postgres 数据库的问题

Posted

技术标签:

【中文标题】使用 sequelize ORM 连接到 node.js 上的 Amazon RDS Postgres 数据库的问题【英文标题】:Issues connecting to Amazon RDS Postgres database on node.js using sequelize ORM 【发布时间】:2016-06-04 20:51:39 【问题描述】:

我目前正在将 Heroku 中设置的环境迁移到 Amazon Web Services 堆栈(RDS PostgreSQL、Elastic Beanstalk)。

我在尝试通过 sequelize.js ORM 连接到 PostgreSQL 时遇到了一些问题。错误信息如下:

未处理的拒绝 SequelizeHostNotFoundError: getaddrinfo ENOTFOUND [主持人]。

我可以通过 pgAdmin 连接到数据库,所以我知道该服务正在运行,并且以下配置已在 Heroku 上运行:

    sequelize = new Sequelize(process.env.DATABASE_URI, 
        dialect: 'postgres',
        protocol: 'postgres',
        logging: true,
        timestamps: false
    )

DATABASE_URI 的格式如下:

postgres://[db_username]:[db_password]@[hostname]:[port]/[db_name]

任何帮助将不胜感激。提前致谢!

【问题讨论】:

【参考方案1】:

我能够在这里解决我的问题。本质上,我通过在环境中正确设置以下内容来解决它。:

    正确格式化 URI -(按照上面的语法,我能够让它工作) 为 Amazon RDS 和 Elastic Beanstalk 启用安全规定 - 我必须为运行 Elastic Beanstalk 的安全组/实例角色启用对 Amazon RDS 实例的入站访问。 (我发现我能够通过我的本地计算机访问 RDS。默认情况下,似乎 RDS 设置了您正在使用的 IP 以便能够使用它......这是有道理的..)

【讨论】:

我仍在与此作斗争。获取连接超时错误。您能否详细说明您的解决方案? 嗨 Nuru,您是否能够通过 curl 或 pgAdmin 之类的工具在本地连接到您的数据库?如果是这样,之后您需要确保检查 RDS 和 Elastic Beanstalk 实例之间的安全组,并确保“入站”设置配置正确。【参考方案2】:

我遇到了一个非常相似的问题,结果发现我的密码中有一个问号——导致一半的密码和连接 URL 的其余部分被忽略(显然是 URL 搜索部分的一部分)。

类似:

new Sequelize("postgres://fred:xj78?23@example.com/db");

我们最终的用户名:fred,密码:xj78,其他所有内容均为空白。

将问号转义为 %3F 可以解决问题。

【讨论】:

遇到了同样的问题。更改密码解决了这个问题。

以上是关于使用 sequelize ORM 连接到 node.js 上的 Amazon RDS Postgres 数据库的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 Sequelize 从 ec2 连接到 postgres RDS

启动新的 Sequelize 后端并且无法连接到 SQLite DB

为什么使用Sequelize迁移创建表,但模型无法连接到数据库

Node.js的ORM框架sequelize

Node.js Sequelize ORM 模型问题

使用Sequelize