Узел- Postgres SequelizeConnectionError: аутентификация по паролю не удалась для пользователя - PullRequest
0 голосов
/ 11 января 2020

Я разрабатываю серверное приложение с узлом и продолжаю. Моя база данных от postgresql.

При запуске приложения соединение с базой данных работает нормально, но когда оно пытается связаться с базой данных для чтения или обновления, происходит сбой с ошибкой соединения: аутентификация по паролю не удалась для пользователь "wushin".

Мне кажется странным, потому что соединение с базой данных уже установлено, и пароль был подтвержден. Ребята, вы знаете, что происходит? Может быть, проблема с модулем pg, но я пробовал разные версии.

Узел версий: 10.17.0 Сиквелизировать: 5.21.3 Postgres: Модуль 10.11 pg: 7.17.1

-> Этот код работает нормально:

const sequelize = new Sequelize(process.env.DATABASE_DEV_URL)

sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.\n')
  })
  .catch(err => {
    console.error('Unable to connect to the database:', err)
  })

-> Но это обещание не выполняется с SequelizeConnectionError:

models.Question.findAll()
    .then(data => {
      console.log('-> Succeeded data fetching\n')
      console.log(data)
    })
    .catch(err => {
      console.log('-> Failed data fetching\n')
      console.log('Error', err)
    })

Журналы:

yarn run v1.19.2
$ node index.js
Example app listening on port 4000 or something!
Executing (default): SELECT 1+1 AS result
Connection has been established successfully.

- Trying to fetch data:
-> Failed data fetching
Error:
 { SequelizeConnectionError: password authentication failed for user "wushin"
    at connection.connect.err (/home/wushin/Projects/GuessGame/theguessgame-api/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:182:24)
    at Connection.connectingErrorHandler (/home/wushin/Projects/GuessGame/theguessgame-api/node_modules/pg/lib/client.js:194:14)
    at Connection.emit (events.js:198:13)
    at Socket.<anonymous> (/home/wushin/Projects/GuessGame/theguessgame-api/node_modules/pg/lib/connection.js:128:12)
    at Socket.emit (events.js:198:13)
    at addChunk (_stream_readable.js:287:12)
    at readableAddChunk (_stream_readable.js:268:11)
    at Socket.Readable.push (_stream_readable.js:223:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
  name: 'SequelizeConnectionError'

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Я наконец исправил это. Проблема заключалась в том, что с sequelize требовалось, чтобы модели вызывали индекс. js, который, как предполагается, будет выполнять подключение sequelize для вас, с помощью создает конфигурацию, которую создает sequelize репозитория.

Мое подключение к sequelize работало хорошо, но тот, который был запущен по требованию моделей, имел некоторую неверную информацию в моей базе данных.

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

Я вставил хорошую информацию конфигурации:

require('dotenv').config()

module.exports = {
  development: {
    url: process.env.DATABASE_URL,
    dialect: 'postgres',
  },
  test: {
    url: process.env.DATABASE_TEST_URL,
    dialect: 'postgres',
  },
  production: {
    url: process.env.DATABASE_PROD_URL,
    dialect: 'postgres',
  },
}

И полностью удалил строку, которую я сам написал:

const sequelize = new Sequelize(process.env.DATABASE_DEV_URL)

Это теперь модели / index. js, которая подключается к базе данных с помощью:

const sequelize = new Sequelize(process.env.DATABASE_URL)

sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.\n')
  })
  .catch(err => {
    console.error('Unable to connect to the database:', err)
  })
0 голосов
/ 12 января 2020

Похоже, вы не передаете конфигурации Sequelize, кроме хоста. Минимальные конфигурации: хост, порт, имя базы данных, имя пользователя диалекта и пароль.

Из документов:

 const Sequelize = require('sequelize');

 // Option 1: Passing parameters separately const sequelize = new
 Sequelize('database', 'username', 'password', {   
   host: 'localhost',  
   dialect: /* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */ 
 });

// Option 2: Passing a connection URI const sequelize = new
 Sequelize('postgres://user:pass@example.com:5432/dbname');
...