尝试从节点应用程序连接时出现 PostgreSQL 错误
Posted
技术标签:
【中文标题】尝试从节点应用程序连接时出现 PostgreSQL 错误【英文标题】:PostgreSQL error when trying to connect from node application 【发布时间】:2018-12-30 13:23:01 【问题描述】:FATAL: no PostgreSQL user name specified in startup packet
通过执行以下操作尝试连接到我的 kubernetes 集群中的 postgreSQL 实例时的日志:
const POSTGRES_DATABASE, POSTGRES_USERNAME, POSTGRES_PASSWORD = require('../config/config');
const Sequelize = require('sequelize');
const conn = new Sequelize(POSTGRES_DATABASE,
username: POSTGRES_USERNAME,
password: POSTGRES_PASSWORD
);
config/config.js
const config =
POSTGRES_DATABASE: 'postgres://postgres/postgresdb',
POSTGRES_USERNAME: 'postgresadmin',
POSTGRES_PASSWORD: 'admin123',
SERVER_PORT: '5000'
module.exports = config;
我在 nodeJS 中使用 SequelizeJS。 http://docs.sequelizejs.com/
由于在 postgreSQL 日志中看到尝试,请求似乎连接正常。但是出了点问题,我想知道 postgres 或节点服务中的权限是否有问题。
感谢一些帮助或想法
【问题讨论】:
POSTGRES_USERNAME
是一个变量吗?它是在哪里定义的?
我更新了第一篇@doublesharp
您正在传递用户名作为密码 - password: POSTGRES_USERNAME
另外,您使用的数据库与配置中的不同。这似乎很奇怪。
我想我的意思是,要么使用 config.js 中的那个,要么从 config.js 中删除它。将其添加到 config.js 中而不使用它会令人困惑,并且会在以后导致更多的混乱。
【参考方案1】:
根据您链接的 Sequelize 文档,创建新连接的参数是 db、用户名、密码。你的代码做了 db,然后是一个带有用户名和密码键的对象。此对象不正确,导致它找不到用户名或密码。试试这个:
const POSTGRES_DATABASE, POSTGRES_USERNAME, POSTGRES_PASSWORD = require('../config/config');
const Sequelize = require('sequelize');
const conn = new Sequelize(POSTGRES_DATABASE, POSTGRES_USERNAME, POSTGRES_PASSWORD);
Sequelize 是否 允许一个可选的选项对象作为最后一个参数,但用户名和密码不应该在其中。
文档的这一页让我感到困惑。
http://docs.sequelizejs.com/manual/installation/usage.html
我相信它所说的是您要么需要定义对象中的所有内容,要么将数据库、用户名和密码作为单独的参数,但我没有看到它在参数和用户名/密码中支持数据库物体。
这似乎也应该起作用:
const conn = new Sequelize(
database: POSTGRES_DATABASE,
username: POSTGRES_USERNAME,
password: POSTGRES_PASSWORD
);
【讨论】:
谢谢哥们,很好的收获。现在我得到错误:连接 ECONNREFUSED 127.0.0.1:5432 它不是我想要连接的本地主机,所以我想我需要在 POSTGRES_DATABASE 中定义数据库名称,然后在选项对象中的某处设置一个主机跨度> 你需要在options对象中添加host
。
我现在意识到我的最后一条评论是连在一起的。 “主机”键是您需要指定的,它知道数据库的 IP 地址或域。看起来您还想将方言设置为“postgres”。我不确定 Sequelize 是否知道 Postgres 默认在端口 5432 上运行。您可能还需要将其指定为“端口”选项。
我目前正在做方言:'postgres',主机:'postgres',但似乎它现在根本没有到达 postgres 服务。它说端口是基于方言的,所以不需要。 // 自定义端口;默认:方言默认
节点是否直接在您的计算机上运行?如果您在 Docker 容器或虚拟机中运行它,您可能会遇到 DNS 未从您的计算机共享到 VM 的问题。以上是关于尝试从节点应用程序连接时出现 PostgreSQL 错误的主要内容,如果未能解决你的问题,请参考以下文章
通过 JDBC 从 Spark 提取表数据时出现 PostgreSQL 错误
42501:在 Postgresql 中查询时出现特权不足错误
尝试迁移 postgreSQL 时出现或接近“WITH ORDINALITY”错误的语法错误
尝试从 Visual c# 程序更新 oracle 时出现“无效操作。连接已关闭”错误