Подключение узла pg к зависанию db - PullRequest
0 голосов
/ 08 мая 2020

У меня проблема с подключением к postgress с узла pg (VPS debian 10).

В моем проекте у меня есть файл с помощником запросов

/ db / index. js

const { Pool } = require('pg');
const config = require('../config');

const pool = new Pool(config.devConfig);

pool.connect((err) => {
  if (err) {
    console.error('connection error', err.stack);
  } else {
    console.log('db connected');
  }
});

module.exports = {
  query: (text, params) => pool.query(text, params),
};

И я использую этот запрос для всех маршрутов, подобных этому

const db = require('../db');
const errorResult = require('../services/errorsHandling');
const validation = require('../services/validation');

const getAllBrands = async (req, res) => {
  try {
    const { rows: brands } = await db.query(`SELECT * FROM public.brands`);

    res.render('adminBrand', {
      brands,
      baseUrl: req.baseUrl,
      msgPageName: '-',
      msgWithoutBrands: '-',
      msgAddBrand: '-',
    });
  } catch (error) {
    errorResult(res, error);
  }
}; 

На моей локальной машине все хорошо. Но на VPS этого не происходит. На VPS у меня есть такие настройки, как

postgresql .conf

listen_addresses = '*'                  # what IP address(es) to listen on;

и pg_hba.conf

# Database administrative login by Unix domain socket
local    all             postgres                               peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

host    all             all             localhost               trust

My git repo https://github.com/truezombie/cartel-screens

Я не вижу никаких ошибок после запуска npm запуска на моем VPS, а также «db connected», но на моем локальном компьютере, если Я пытаюсь подключиться со своего локального компьютера к VPS db, все в порядке, и я вижу «db connected».

Открыты порты 3000, 4000, 5432.

1 Ответ

0 голосов
/ 08 мая 2020

Поскольку ваш pg_hba.conf выглядит не затронутым. Посмотрите на эти строки:

# Database administrative login by Unix domain socket
local   all             postgres                                peer    
# "local" is for Unix domain socket connections only
local   all             all                                     peer

Это говорит вам, что к базе данных можно получить доступ только в режиме одноранговой аутентификации. Для этого вы должны получить доступ к базе данных с учетными данными postgres.

$sudo su postgres

после этого вам должен быть предложен пароль для вашего суперпользователя в linux. После успешного ввода пароля вы должны увидеть, что метка подсказки bash изменится на:

postgres@<yourlinuxinstance>

Теперь вы можете получить доступ к базе данных postgres в режиме одноранговой аутентификации.

$psql -U postgres
#should login in postgres with success
postgres=#

In psql в командной строке вам необходимо создать пользователя и пароль для доступа к базе данных.

CREATE USER foo WITH ENCRYPTED PASSWORD '-+mysecurepasswordforthisuser+-';
CREATE DATABASE passport;
GRANT ALL PRIVILEGES ON passport TO foo;
\q #exit psql shell
$exit #exit from su session with postgres username

После этого вы должны получить доступ к файлу pg_hba.conf и изменить метод доступа, изменив peer на md5

# "local" is for Unix domain socket connections only
local   all             all                                     md5

Перезапустить базу данных

$sudo service postgresql restart

После этого вы можете настроить текущий добавленный пароль пользователя и базу данных в строке подключения.

Теперь вы должны получить доступ к своей базе данных с вашего кода nodejs успешно.

Если вам нужны пояснения, вы можете получить доступ к этому руководству

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...