Как подключить приложение Node.js к postgresql на сервере Ubuntu? - PullRequest
0 голосов
/ 08 мая 2020

Я запустил сервер. Установил там nodejs, nginx, postgres, ufw и другие. Сайт рабочий. Проблема с подключением к postgres. Я запустил сервер. Установлены там nodejs, nginx, postgres, ufw и другие. Сайт рабочий. Проблема в подключении к postgres. Он находится в соединении, а не в запросе, потому что я пробовал много sql запросов, но он просто игнорирует client.query (). Postgres настройки и конфигурация по умолчанию. Я ничего не менял.

в файле конфигурации #listening_address - это комментарий.

Используется node- postgres.

const { Client } = require('pg');
const client = new Client({
  user: 'admin', //tried postgres
  host: '127.0.0.1', //tried *, site ip
  database: 'passport', //tried other DB
  password: 'secretpass', //installed through $passwd postgres, #ALTER USER admin with password ''
  port: 5432,
});
client.connect();

app.post('/confirm', urlencodedParser, function (req, res){
  let uid = uuidv4();
  let query= {
    text : 'INSERT INTO users(uid, name, surname, birthday, gender, email, password, region, language) VALUES($1, $2, $3, $4, $5, $6, $7, $8, $9);',
    values : [uid, user.name, user.surname, user.birthday, user.gender, user.email, user.password, user.region, user.region]
  }

  client.query(query, (err, result) => { // I have tried many sql queries, but it just ignores client.query()

    // console.log('some text');  doesn't display
    if (err) {
      console.log(err.stack)
    } else {
        res.render('addsite', {user: user});
      }
  });
});

/ etc / postgresql / 9.5 / main / postgresql .conf

# i didn't change anything
data_directory = '/var/lib/postgresql/9.5/main'
hba_file = '/etc/postgresql/9.5/main/pg_hba.conf'
ident_file = '/etc/postgresql/9.5/main/pg_ident.conf'

external_pid_file = '/var/run/postgresql/9.5-main.pid'
port = 5432 
max_connections = 100
unix_socket_directories = '/var/run/postgresql' 
ssl = true
ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem'
ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'
shared_buffers = 128MB
dynamic_shared_memory_type = posix
log_line_prefix = '%t [%p-%l] %q%u@%d '
log_timezone = 'Etc/UTC'
stats_temp_directory = '/var/run/postgresql/9.5-main.pg_stat_tmp'

datestyle = 'iso, mdy'
timezone = 'Etc/UTC'
lc_messages = 'en_US.UTF-8' 
lc_monetary = 'en_US.UTF-8' 
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'

default_text_search_config = 'pg_catalog.english'

/ etc / postgresql / 9.5 / main / 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
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

помогите мне, пожалуйста !!!

Ответы [ 2 ]

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 успешно.

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

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

Привет, вам всем нужно использовать connect метод pg для подключения к базе данных.

После добавления конфигурации:

client.connect()

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

Для получения дополнительной информации перейдите по этой ссылке при подключении: https://node-postgres.com/features/connecting

...