сервер node не может подключиться к postgres db

Недавно я переключился с MySQL на postgres в качестве моей базы данных для проекта node.js. Хотя я могу получить доступ к своей удаленной базе данных postgres из моего локального клиента pgAdmin III (OSX), до сих пор мне не удалось подключиться к моей базе данных через node.js. Я уверен, что учетные данные, которые я ввел для pgAdmin и моего node.js, были точно такими же. Еще одна вещь, которую я пробовал, - это установить доверие к моему локальному IP-адресу вместо md5 в pg_hba.conf на моем сервере базы данных. Есть ли что-то, что я сделал неправильно? Моя любимая поисковая система выдала несколько тревожных запросов о сбросе моей локальной ОС. Я просто использовал пример из документа репозитория github node-postgres:

var pg = require('pg');

var conString = "postgres://myusername:mypassword@hostname:5432/dbname";

var client = new pg.Client(conString);
client.connect(function(err) {
  if(err) {
    return console.error('could not connect to postgres', err);
  }
  client.query('SELECT NOW() AS "theTime"', function(err, result) {
    if(err) {
      return console.error('error running query', err);
    }
    console.log(result.rows[0].theTime);
    client.end();
  });
});

И это ошибки, которые я получаю каждый раз, когда пытаюсь запустить свой сервер:

could not connect to postgres { [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' }

Помощь будет принята с благодарностью


person Dani    schedule 12.02.2014    source источник
comment
Хм, что host hostname дает вам из командной строки на этом сервере? Это один из его IP-адресов, и он его слушает? Ошибка может показаться, что хост не знает, что это должно быть «имя хоста», которое, по вашему мнению, должно называться... На заметку: я вижу только примеры с postgres://, а не pg://, я не знаю, имеет ли это значение. ..   -  person Wrikken    schedule 13.02.2014
comment
Спасибо за ответ, Wrikken. Вывод для сервера БД: Host hostname not found: 3(NXDOMAIN). Сервер БД - это VPS. Я полагал, что это не должно иметь значения.   -  person Dani    schedule 13.02.2014
comment
Итак, я имею в виду: введенное вами имя хоста... не имя хоста сервера? Он говорит вам, что не может преобразовать имя в IP, поэтому терпит неудачу. Итак, возможно, введите правильный (или выберите localhost, если вы знаете, что это тот же сервер, на котором работает код, как указано в ответе ниже). Если и это не помогло: попробуйте указать правильный IP адрес.   -  person Wrikken    schedule 13.02.2014
comment
Я также тестировал его на сервере БД. Оказалось, это пароль. Спасибо за вашу помощь на голландском языке, ваши идеи помогли мне добраться туда   -  person Dani    schedule 14.02.2014
comment
Голландская помощь? Я впервые слышу эту фразу. Как голландец, я не знаю, что об этом думать ;)   -  person Wrikken    schedule 14.02.2014
comment
это придумал какой-то голландец   -  person Dani    schedule 14.02.2014


Ответы (2)


Похоже, что node-postgres не принимает хэштег в вашем пароле. После удаления хэштега я смог подключиться без проблем. Я бы не подумал об этом, и это не показалось мне проблемой, так как pgAdmin принял это.

Лучшим решением было бы использовать encodeURIComponent для кодирования строки пароля. Это позволит использовать хэштеги в URL.

person Dani    schedule 13.02.2014
comment
Дох! Конечно, закодируйте свой пароль для URL ;) Приятно знать, что проблема решена. - person Wrikken; 14.02.2014
comment
Отлично, большое спасибо. Простое выполнение encodeURIComponent('passwordwith#') устранило проблему. - person Zaptree; 14.09.2014
comment
Спасибо - не могу представить, что когда-нибудь найду это с помощью отладки, наверное, сдался бы! - person Tobias Fünke; 08.07.2015
comment
точно мой случай. Я использую encodeURIComponent, и проблема была решена. Спасибо за вашу помощь - person Lucas Do Amaral; 24.10.2016
comment
символ # в пароле заставил его не подключаться.. Изменил пароль и узел, связанный с бд - person mythicalcoder; 29.04.2017

Интерфейс в node.js, который я использовал, можно найти здесь https://github.com/brianc/node-postgres

var pg = require('pg');
var conString = "postgres://YourUserName:YourPassword@localhost:5432/YourDatabase";

попробуй поменять pg:// на postgres://

Это было взято из другой статьи stackoverflow: Как подключиться к Postgres через Node.js

person matthew.peters    schedule 13.02.2014
comment
Я тоже пробовал это, я изменил postgres:// на pg:// после того, как postgres:// не работал. Забыл упомянуть, что - person Dani; 13.02.2014