【问题标题】:Node-Postgres SequelizeConnectionError: password authentication failed for userNode-Postgres SequelizeConnectionError:用户的密码验证失败
【发布时间】:2020-01-13 17:17:45
【问题描述】:

我正在使用 node 和 sequelize 开发一个后端应用程序。我的数据库来自 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'

【问题讨论】:

  • 您能否显示您的 DATABASE_DEV_URL,只是隐藏您的密码...同时发布您将模型与您建立连接的 sequelize 实例相关联的代码
  • 如果您使用的是node.js dotenvpg,请确保您的index.js 中有require('dotenv').config();。添加后,此错误已修复。

标签: node.js postgresql sequelize.js


【解决方案1】:

您似乎没有将任何配置传递给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');

【讨论】:

    【解决方案2】:

    我终于解决了这个问题。问题在于,对于 sequelize,需要模型调用一个 index.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)
    

    现在是 models/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)
      })
    

    【讨论】:

      猜你喜欢
      • 2020-01-18
      • 2011-12-03
      • 1970-01-01
      • 2015-11-23
      • 2023-04-06
      • 2020-12-09
      • 2020-09-21
      • 2023-04-05
      相关资源
      最近更新 更多