我使用 pg://user:pass@localhost:port/table
连接到我的 AWS 数据库。当我使用 localhost 时,该应用程序运行良好,但当我尝试连接 AWS 服务器时,它崩溃了。
即使是简单的连接代码也会给我这个错误。 数据库名称是 people,它在端口 8080 上运行,但在这个错误中它显示 5432,即使我在 conString 中声明了正确的端口号也是如此。
Error: 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();
最佳答案
如果您确定您的连接字符串已经像 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 gimbberish]
因为那个额外的 '/'
。
如果使用 JSF 访问它的同事可以编辑他们的连接字符串,我建议将密码更新为双方都接受的密码。如果他们不能,那么您需要创建另一个具有相同访问权限但可以从 Node.js 使用的不同密码的用户/Angular 色。
编辑: 或者更好,根据讨论 here ,尝试对连接字符串的密码部分进行编码。他们说它有效。我没有费心去尝试,因为我已经更改了密码。由于您仍然遇到此问题,您可能想先尝试一下,然后再执行我上面的两个建议之一。
关于javascript - NodeJS Postgres 错误 getaddrinfo ENOTFOUND,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34802333/