javascript - NodeJS Postgres 错误 getaddrinfo ENOTFOUND

标签 javascript postgresql express

我使用 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/

相关文章:

Spring 启动 + PostgreSQL : Error creating bean with name 'entityManagerFactory' defined in class path resource

java - PostgreSQL 中的可修改字符串数组

mongodb - node-mongodb-native 保留集合吗?

json - Postgres -> 错误 : invalid memory alloc request size 1212052384

node.js - MongoDB Promise 和结果处理

node.js - 具有平均堆栈的 Node 快速上传文件

javascript - 模态出现后不可点击 - Safari

javascript - 如何在应用程序打开时创建一次性事件?

javascript - 为什么重新分配后不再反射(reflect)对象的更改?

javascript - iFrame 内的第 3 方应用程序?