Node.js,PostgreSQL错误:主机没有pg_hba.conf条目

stc*_*cho 22 postgresql heroku node.js express

我正在关注这篇文章((http://nodeexamples.com/2012/09/21/connecting-to-a-postgresql-database-from-node-js-using-the-pg-module/).我已经将我的应用程序部署到heroku并且当前正在使用express,node.js,尝试连接到我刚刚安装的Heroku中的PostgresSQL数据库.我到达文章的最后并使用命令

node myfile.js
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

error: no pg_hba.conf entry for host "...", user "...", database "...", ... 
Run Code Online (Sandbox Code Playgroud)

如何创建一个以及我应用程序目录中的哪个位置?

以下是整个错误消息.我更改了IP地址,用户和数据库的字符串,但它看起来基本上就像它.

events.js:72
    throw er; // Unhandled 'error' event
          ^
error: no pg_hba.conf entry for host "00.000.000.00", user "username", database "databasename", SSL off
at Connection.parseE (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:526:11)
at Connection.parseMessage (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:356:17)
at Socket.<anonymous> (/Users/user/workspace/MyApp/app/node_modules/pg/lib/connection.js:105:22)
at Socket.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:748:14)
at Socket.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:410:10)
at emitReadable (_stream_readable.js:406:5)
at readableAddChunk (_stream_readable.js:168:9)
at Socket.Readable.push (_stream_readable.js:130:10)
Run Code Online (Sandbox Code Playgroud)

编辑:我做了一些研究,发现'pg_hba.conf'文件在我的文件中

/usr/local/var/postgres 
Run Code Online (Sandbox Code Playgroud)

我将这一行添加到'pg_hba.conf'文件中

# TYPE  DATABASE        USER            ADDRESS                 METHOD
 host   all             all                                     trust
Run Code Online (Sandbox Code Playgroud)

也试过了

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host   all             all              0.0.0.0/0               md5
Run Code Online (Sandbox Code Playgroud)

但它一直说我的主机,用户,数据库等没有条目......我的'pg_hba.conf'语法是否有任何错误?

aem*_*bke 41

更改您的连接代码以使用ssl.关注您的链接示例:

var conString = "pg://admin:guest@localhost:5432/Employees";
var client = new pg.Client(conString);
client.connect();
Run Code Online (Sandbox Code Playgroud)

变为:

var client = new pg.Client({
    user: "admin",
    password: "guest",
    database: "Employees",
    port: 5432,
    host: "localhost",
    ssl: true
}); 
client.connect();
Run Code Online (Sandbox Code Playgroud)

https://github.com/brianc/node-postgres/wiki/Client#new-clientobject-config--client

  • 如果您更愿意继续使用连接字符串,则可以设置env变量PGSSLMODE.https://github.com/brianc/node-postgres/blob/master/lib/connection-parameters.js#L24 (2认同)

viz*_*zmi 14

在sequelize忽略你开启ssl的所有努力的情况下,你可以尝试说服pg默认为所有conncetions启用ssl:

var pg = require('pg');
pg.defaults.ssl = true;

const Sequelize = require('sequelize');
const sequelize = new Sequelize('postgres://...');
Run Code Online (Sandbox Code Playgroud)

  • 另一个更简洁的imo选项是在您的`sequelizeConfig`中执行以下操作:{{dialect“:” postgres“,” ssl“:true,” dialectOptions“:{” ssl“:{” require“:true}} }`https://github.com/sequelize/cli/issues/154#issuecomment-167960024 (4认同)

Ope*_*ell 12

添加?ssl=true应该工作到 uri 的末尾。

var conString = "pg://admin:guest@localhost:5432/Employees?ssl=true";
Run Code Online (Sandbox Code Playgroud)


小智 12

const sequelize = new Sequelize({
  database: "DB",
  username: "root",
  password: "pass",
  host: "localhost",
  port: 5432,
  dialect: "postgres",
  dialectOptions: {
    ssl: {
      require: true, // This will help you. But you will see nwe error
      rejectUnauthorized: false // This line will fix new error
    }
  },
});
Run Code Online (Sandbox Code Playgroud)

  • 你救了我的命,维克多! (2认同)

Sim*_*zen 8

在将heroku上的pg数据库从hobbytier 升级到时,我们遇到了此错误standard-0。SSL是必需的,但我们未在配置中进行设置。

初始化新的Sequelize(...)时包含在配置中

"dialect": "postgres",
"dialectOptions": {
  "ssl": true
}
Run Code Online (Sandbox Code Playgroud)

技巧是,将ssl选项包装在中dialectOptions。在这里找到:https : //github.com/sequelize/sequelize/issues/956#issuecomment-147745033

  • @defraggled 我已经添加了你关于爱好 dyno 的提示 (2认同)

小智 6

带有 SSL 的 DialectOptions 有效,但您也可以更新配置变量 PGSSLMODE。

或者,如果指定 PGSSLMODE 配置变量,则可以省略 ssl 配置对象:heroku config:set PGSSLMODE=no-verify。

参见Heroku 指南

Heroku 在此处的变更日志中宣布了此 SSL 更改


Sho*_*rua 6

在创建 pg 客户端时,此配置为我解决了这个问题。您还可以在此处阅读模块网站上编写的详细文档 >>> https://node-postgres.com/features/ssl。谢谢。

new pg.client({
  connectionString,
  ssl: {
    rejectUnauthorized: false,
  },
})
Run Code Online (Sandbox Code Playgroud)


tab*_*h89 5

您还可以使用环境配置变量“ PGSSLMODE”通过Heroku的Web界面或CLI进行“要求”。

案例:Postgres dB设置为Heroku插件,并附加到Heroku Dyno上的应用程序上。

Heroku在如何连接到其附加数据库之一方面提供了很好的支持。但是,不幸的是,它没有(或我错过了)任何有关强制执行SSL的内容,因为默认情况下,所有以Standard-0开头的Heroku dB层都强制执行SSL。

  • 谢谢-已升级到Standard-0,并且没有看到警告会更改SSL要求,这引起了轻微的恐慌。 (2认同)

rah*_*311 5

对我有用的是上述答案和评论的组合(来自@schybo)

let cloud_config = {
  username: process.env.DB_USERNAME,
  database: process.env.DB_DATABASE,
  password: process.env.DB_PASSWORD,
  host: process.env.DB_HOSTNAME,
  port: 5432,
  ssl: true,
  dialect: 'postgres',
  dialectOptions: {
    "ssl": {"require":true }
  }
};
Run Code Online (Sandbox Code Playgroud)

同时使用ssl: true,dialectOptions: { "ssl": {"require":true }}

评论Sequelize 问题,该问题也已添加到文档中。