我一直在尝试使用节点API远程连接到我的azure postgres数据库。我正在使用最新版本的node,objection.js,knex.js和pg。
我的主机地址是(databasePath):
matplotlib
我已经设置了一个包装器来帮助进行SQL连接。我的连接参数在.env文件中定义。每当我尝试使用配置进行连接时,都会出现以下异常:
@import "~angular/material/prebuilt-themes/deeppurple-amber.css";
body {
padding: 0;
margin: 0;
}
如果我尝试使用连接字符串,则DNS无法解析提供的地址。我尝试了两种连接字符串的单独变体形式:
project-name.database.windows.net
和
Unhandled rejection error: Invalid Username specified. Please check the Username and retry connection. The Username should be in <username@hostname> format.
at Connection.parseE (/Users/Eddie/projects/Giggle-Node/node_modules/pg/lib/connection.js:554:11)
at Connection.parseMessage (/Users/Eddie/projects/Giggle-Node/node_modules/pg/lib/connection.js:379:19)
at TLSSocket.<anonymous> (/Users/Eddie/projects/Giggle-Node/node_modules/pg/lib/connection.js:119:22)
at emitOne (events.js:96:13)
at TLSSocket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at TLSSocket.Readable.push (_stream_readable.js:134:10)
at TLSWrap.onread (net.js:547:20)
例外是:
postgres://userName@myHost:passWord@myHost.postgres.database.azure.com:5432/dbName?ssl=true
我的包装器如下
postgres://userName:passWord@myHost.postgres.database.azure.com:5432/dbName?ssl=true
我的配置或连接字符串是否有问题? 我还在azure数据库上为当前的IPv4添加了防火墙例外。
答案 0 :(得分:0)
几年来我一直在使用Objection和Knex,但我从未见过围绕它们作为类的类包装器。但是,在接受它的实际价值后,我相信您的问题在于连接字符串。您不能将连接字符串用于Azure Postgres服务,因为默认和必需的Azure Postgres用户名使用@
在创建用户名后指定主机。因此,连接字符串将不起作用,因为应该将@
从主机名中分离出用户名,并且由于用户名是在用户名中使用的,因此它将断开连接字符串,这似乎是用户名的来源。您的错误信息。我不认为有办法解决这个问题。我在下面举一个例子。注意多余的@
,它会抛出连接字符串。我建议遵循此here的knex文档。
Azure Postgres用户名是:user_defined_user_name@user_defined_azure_postgres_database_service_name
您的连接字符串如下所示:postgres://user_defined_user_name@user_defined_azure_postgres_database_service_name@myHost:passWord@myHost.postgres.database.azure.com:5432/dbName?ssl=true
虽然我认为上面列出的是问题所在,但您可以尝试以下其他操作: