使用sequelize ORM在node.js上连接Amazon RDS Postgres数据库时出现问题

7
我目前正在将在Heroku上设置的环境迁移到AWS堆栈(RDS PostgreSQL,Elastic Beanstalk)中。
当我尝试通过sequelize.js ORM连接到PostgreSQL时,遇到了一些问题。以下是错误消息:
Unhandled rejection SequelizeHostNotFoundError: getaddrinfo ENOTFOUND [host].
我可以通过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]

任何帮助都将不胜感激。提前感谢!
2个回答

4
我能够在这里解决我的问题。基本上,我通过在环境中正确设置以下内容来解决了这个问题:
  1. 正确格式化URI - (按照上述语法,我能够使其正常工作)
  2. 启用Amazon RDS和Elastic Beanstalk的安全措施 - 我必须为Elastic Beanstalk运行的安全组/实例角色启用对Amazon RDS实例的入站访问。(我被卡住了,因为我能够通过我的本地计算机访问RDS。默认情况下,似乎RDS设置使用您正在使用的IP地址...这是有道理的...)

我仍在与此作斗争。出现了连接超时错误。您能详细说明一下您的解决方案吗? - Nuru Salihu
你好Nuru,你能够通过curl或像pgAdmin这样的工具本地连接到你的数据库吗?如果可以的话,接下来你需要确保检查你的RDS和Elastic Beanstalk实例之间的安全组,并确保"Inbound"设置正确配置。 - James

1
我遇到了非常类似的问题,结果发现我的密码里有一个问号——导致连接URL中剩余部分和一半的密码被忽略了(因为它们显然是URL搜索部分的一部分)。
类似于下面这样:
new Sequelize("postgres://fred:xj78?23@example.com/db");

当我们使用用户名:fred,密码:xj78,其他所有信息为空时,会出现问题。

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


遇到了同样的问题。更改密码解决了此问题。 - Avraham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接