postgresql NodeJS Postgres error getaddrinfo ENOTFOUND

l3zydbqr  于 2023-03-29  发布在  PostgreSQL
关注(0)|答案(9)|浏览(243)

我使用pg://user:pass@localhost:port/table连接到我的AWS数据库。当我使用localhost时,应用程序工作正常,但当我尝试连接AWS服务器时,它就福尔斯了。
即使是一个简单的连接代码也会给我这个错误。数据库名称是people,它运行在端口8080上,但在这个错误中,即使我在conString中声明了正确的端口号,它也显示为5432。
错误:getaddrinfo ENOTFOUND people people:5432 at errnoException(dns.js:26:10)at GetAddrInfoReqWrap.onlookup [as oncomplete](dns.js:77:26)
这是我的代码:

var pg = require("pg");

var conString = "pg://someuser:pass@db-endpoint:8080/postgres";
var client = new pg.Client(conString);
client.connect();
ergxz8rk

ergxz8rk1#

如果你确定你的连接字符串已经像gnerkus描述的那样格式良好,你需要检查的最后一件事就是你的密码。如果它包含非字母数字字符,也许这就是导致问题的原因。似乎是Node.js或JavaScript本身的工作方式导致了这一点(我不太确定,因为pg-admin可以使用我的初始密码连接)。
我的密码是包含'+''/'(通过创建一个充满乱码的长json然后散列它得到base64字符串),我肯定会收到和你一样的错误。一旦我摆脱它(从我的连接字符串和更新我的数据库的密码),它的工作正常。
哦,还有...... '='是可以接受的。因为看起来问题是在数据库端的url解码过程中。当我发送'+'时,我认为它被' '替换,这将导致不正确的密码。而'/'导致格式错误的url,这是我们错误的根本原因(它说找不到)。看看这个例子。

postgres://username:sdkadady88da8+8ahdajd/ashdi==@localhost/database

我相信你会意识到有额外的'/'会导致错误的url分解。所以,protocol:// user:pass@host / database变成了protocol:// [malformed user:pass@host] / [malformed database name] / [some gibberish],因为额外的'/'
如果你的同事使用JSF访问它可以编辑他们的连接字符串,我建议将密码更新为双方都接受的密码。如果他们不能,那么你需要创建另一个具有相同访问权限但可以从Node.js使用的不同密码的用户/角色。
编辑:或者更好的是,根据讨论here,尝试对连接字符串的密码部分进行编码。他们说这很有效。我没有费心去尝试,因为我已经更改了我的密码。既然你仍然有这个问题,你可能想在做我上面的两个建议之前先尝试一下。

htrmnn0y

htrmnn0y2#

对您的密码进行编码。

const userPasswordDatabase = `${encodeURIComponent(database.dbPassword)}@`;
kdfy810k

kdfy810k3#

在我的场景中,我正在与docker容器建立数据库连接,在那里我使用了错误的DB_HOST,并且我使用了docker服务名称作为DB_HOST,而不是localhost。
更正DB_HOST后,此问题得到解决。
错误的.env设置:DB_HOST=postgres
正确的.env设置:DB_HOST=localhost

5ktev3wc

5ktev3wc4#

Postgres数据库连接的默认端口是5432。AWS上的Postgres数据库可能正在该端口上运行。此外,连接字符串应采用以下格式:
var conString =“postgres://用户名:密码@本地主机/数据库”;
node-postgres文档中所定义。您应该将连接字符串更新为:

var conString = "postgres://someuser:pass@db-endpoint:5432/people";
jucafojl

jucafojl5#

确保您的URL不包含http://

jfgube3f

jfgube3f6#

不知道这是不是已经发布了,但它不会接受我密码中的$。删除它,它就像一个魅力。

pdkcd3nj

pdkcd3nj7#

在将主机传递给pool类时,您可能已经写了一个“@”,请记住它必须像这样的“地址字符串”,而不是像这样的“@地址字符串”

esyap4oy

esyap4oy8#

如果它帮助任何人,我有这个问题试图连接到一个postgres数据库在AWS上从一个API托管在Heroku使用pg npm包.我改变了PGHOST环境变量从https://aws-sondayy-prod.caoqasdfsdftwur.us-east-2.rds.amazonaws.com到aws-sondayy-prod.caoqasdfsdftwur.us-east-2.rds.amazonaws.com(即删除https://),它开始工作.

hfyxw5xn

hfyxw5xn9#

离开这里以防有人和我有同样的问题
我用127.0.0.1:5432代替了127.0.0.1

相关问题