首页 > 解决方案 > 尝试从节点应用程序连接时出现 PostgreSQL 错误

问题描述

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.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 或节点服务中的权限是否有问题。

感谢一些帮助或想法

标签: node.jspostgresqlkubernetessequelize.js

解决方案


根据您链接的 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
});

推荐阅读