gpt4 book ai didi

node.js - Postgres、Docker 和 Node.js - 密码验证失败(连接被拒绝或 psql : FATAL: role "root" does not exist)

转载 作者:行者123 更新时间:2023-11-29 12:55:49 24 4
gpt4 key购买 nike

我只是不明白为什么我不能使用 Node.js 登录 Postgres

user: postgres
password: postgres
host: 192.168.99.100
port: 5432
database: test_db

下面是Node.js中导致错误的几行代码

错误:用户“postgres”的密码验证失败

var pg = require('pg');
var conString =
"postgres://postgres:postgres@192.168.99.100:5432/test_db";

var client = new pg.Client(conString);
client.connect();

我从 Docker 容器运行 Postgres。

我启动了另一个容器并可以使用以下命令成功访问数据库

psql -U postgres -d test_db -h 192.168.99.100 -W

此外,我可以使用 pgAdmin 4 成功登录

pg_hba.conf

 # TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres trust
#host replication postgres 127.0.0.1/32 trust
#host replication postgres ::1/128 trust

host all all all md5

postgresql.conf

 #------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*' # comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
#port = 5432 # (change requires restart)
max_connections = 100 # (change requires restart)
#superuser_reserved_connections = 3 # (change requires restart)
#unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
# (change requires restart)
#unix_socket_group = '' # (change requires restart)
#unix_socket_permissions = 0777 # begin with 0 to use octal notation
# (change requires restart)
#bonjour = off # advertise server via Bonjour
# (change requires restart)
#bonjour_name = '' # defaults to the computer name
# (change requires restart)

# - Security and Authentication -

#authentication_timeout = 1min # 1s-600s
#ssl = off # (change requires restart)
#ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers
# (change requires restart)
#ssl_prefer_server_ciphers = on # (change requires restart)
#ssl_ecdh_curve = 'prime256v1' # (change requires restart)
#ssl_cert_file = 'server.crt' # (change requires restart)
#ssl_key_file = 'server.key' # (change requires restart)
#ssl_ca_file = '' # (change requires restart)
#ssl_crl_file = '' # (change requires restart)
#password_encryption = on
#db_user_namespace = off
#row_security = on

# GSSAPI using Kerberos
#krb_server_keyfile = ''
#krb_caseins_users = off

# - TCP Keepalives -
# see "man 7 tcp" for details

#tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds;
# 0 selects the system default
#tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds;
# 0 selects the system default
#tcp_keepalives_count = 0 # TCP_KEEPCNT;
# 0 selects the system default

感谢任何帮助...

最佳答案

以上都没有帮助通过 Node.js 应用程序连接到数据库

经过几个小时的反复试验,我决定在我的 MAC 上安装一个 Postgres 实例。在安装 Postgres 时使用了操作系统的登录凭据(在本例中是我的 MAC 登录凭据)。我能够使用我的 Node.js 应用程序登录到 Postgres 数据库。

然后我想也许这就是导致连接问题的全部原因 - 操作系统用户名。标准 Postgres Docker 镜像以 root 作为标准用户名。切换到 root 后,我可以毫无问题地登录。

重现步骤如下:

  1. 获取标准的 Postgres Docker 镜像

    docker pull postgres
  2. 使用以下环境变量启动 Docker 容器:

    docker run --name pg -p 5432:5432 -e POSTGRES_PASSWORD=passwrd -e POSTGRES_USER=root -e POSTGRES_DB=dse -d postgres
  3. 启动命令行界面并测试连接性。这使用 docker 主机的 IP。要获取 IP,请使用 docker-machine ip。密码是passwrd

    docker exec -ti pg /bin/bash

    psql -U root -d dse -h 192.168.99.100 -W
    Password for user root:
    psql (9.6.2)
    Type "help" for help.

    dse=#

注意:这也将防止任何类似这样的错误:psql: FATAL: role "root"does not exist

  1. 使用以下内容创建一个 Node.js 应用程序和一个名为 connect.js 的文件:

    var pg = require('pg');

    var conString = "postgres://root:passwrd@192.168.99.100/dse";
    var client = new pg.Client(conString);
    client.connect();
    console.log(client.connectionParameters);
    process.exit(1);
  2. 运行应用

    node connect.js 

PS: pg_hba.confpostgresql.conf 这两个文件我都没有编辑。

希望对遇到同样问题的人有所帮助。

关于node.js - Postgres、Docker 和 Node.js - 密码验证失败(连接被拒绝或 psql : FATAL: role "root" does not exist),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43532280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com