Я пытался подключиться к своей базе данных Azure Postgres удаленно с помощью API узла. Я использую последнюю версию узла, objection.js, knex.js и pg.
Мой адрес хоста (databasePath):
project-name.database.windows.net
Я установил оболочку, чтобы помочь с соединением SQL. Мои параметры подключения определены в файле .env. Всякий раз, когда я пытаюсь подключиться с помощью конфигурации, я получаю следующее исключение:
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)
Если я пытаюсь использовать строку подключения, DNS не может разрешить указанный адрес. Я пробовал с двумя отдельными вариантами строки подключения в виде:
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
Исключение составляет:
Unhandled rejection Error: getaddrinfo ENOTFOUND
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
Моя оболочка выглядит следующим образом
const { Model } = require( "objection" );
const Knex = require( "knex" );
const dotenv = require( "dotenv" );
dotenv.config();
class ObjectionSQLHelper
{
constructor()
{
this.SQLDatabaseType = process.env.SQL_VARIANT;
this.databasePath = process.env.DB_PATH;
this.dataBaseName = process.env.DB_NAME;
this.databasePort = process.env.DB_PORT;
this.databaseUserName = process.env.DB_USER_NAME;
this.databasePassword = process.env.DB_PASSWORD;
}
get connectionSchema()
{
const knexSchema =
{
client: this.SQLDatabaseType,
connection: {
//connectionString: this.connectionString,
userName: this.databaseUserName,
passWord: this.databasePassword,
server: this.databasePath,
host: this.databasePath,
options:
{
database: this.dataBaseName,
encrypt: true,
port: this.dataBasePort,
ssl: true
}
},
debug: true
}
return knexSchema;
}
get connectionString()
{
return `postgres://${ this.databaseUserName }:${ this.databasePassword }@${ this.databasePath }.postgres.database.azure.com:5432/${ this.dataBaseName }?ssl=true`
}
connect()
{
this.knexConnection = Knex( this.connectionSchema );
Model.knex( this.knexConnection );
}
}
const objectionHelperSinglton = new ObjectionSQLHelper();
objectionHelperSinglton.connect();
Есть ли проблема с моей конфигурацией или строкой подключения?
Я также добавил исключение брандмауэра для моего текущего IPv4 в моей базе данных Azure.