Node.js,PostgreSQL错误:没有主机的pg_hba.conf条目
我正在关注这篇文章(()。我已经将我的应用程序部署到heroku,目前正在使用express node.js尝试连接到我刚刚安装的heroku中的PostgresSQL数据库。我在文章的最后使用了这个命令Node.js,PostgreSQL错误:没有主机的pg_hba.conf条目,node.js,postgresql,express,heroku,Node.js,Postgresql,Express,Heroku,我正在关注这篇文章(()。我已经将我的应用程序部署到heroku,目前正在使用express node.js尝试连接到我刚刚安装的heroku中的PostgresSQL数据库。我在文章的最后使用了这个命令 node myfile.js 我得到这个错误 error: no pg_hba.conf entry for host "...", user "...", database "...", ... 我如何创建一个应用程序,我应该将它放在我的应用程序目录中的什么位置 下面是整个错误消息。我
node myfile.js
我得到这个错误
error: no pg_hba.conf entry for host "...", user "...", database "...", ...
我如何创建一个应用程序,我应该将它放在我的应用程序目录中的什么位置
下面是整个错误消息。我更改了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)
我在“pg_hba.conf”文件中添加了这一行
# TYPE DATABASE USER ADDRESS METHOD
host all all trust
也试过
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
但它一直说我的主机、用户、数据库等没有条目。。。
我的'pg_hba.conf'语法是否有任何错误?请更改连接代码以使用ssl。下面是链接的示例:
var conString = "pg://admin:guest@localhost:5432/Employees";
var client = new pg.Client(conString);
client.connect();
变成:
var client = new pg.Client({
user: "admin",
password: "guest",
database: "Employees",
port: 5432,
host: "localhost",
ssl: true
});
client.connect();
如果sequelize忽略了您打开ssl的所有努力,您可以尝试说服pg默认为所有连接启用ssl:
var pg = require('pg');
pg.defaults.ssl = true;
const Sequelize = require('sequelize');
const sequelize = new Sequelize('postgres://...');
您还可以通过Heroku的web界面或CLI使用环境配置变量“PGSSLMODE”来“require” 案例:Postgres dB设置为Heroku插件,并连接到Heroku Dyno上的应用程序
Heroku在如何连接到它的一个附加数据库方面提供了一些非常好的支持;但是,不幸的是,它没有提到(或者我没有提到)如何强制SSL,因为所有以Standard-0开始的Heroku dB层默认都强制SSL。在Heroku上运行: 我们在将heroku上的pg数据库从
hobby
层升级到standard-0
时遇到此错误。需要SSL,但我们没有在配置中设置它
初始化新Sequelize时包含在配置中(…)
这个技巧是,ssl选项包装在方言选项中。
可在此处找到:
@Atish提供的信息:
使用
只需在客户端初始化中添加一个标志:
改变
const conString = "pg://admin:guest@localhost:5432/Employees"
const client = new pg.Client(conString);
client.connect();
到
对我有效的是上述答案和评论的结合(来自@schybo)
同时使用ssl:true、
和选项:{“ssl”:{“require”:true}
关于Sequelize问题,该问题也添加到文档中。设置ssl:true
对我有效
let pg = require('pg');
let pgClient = new pg.Client({
user: "admin",
password: "guest",
database: "Employees",
port: 5432,
host: "localhost",
ssl: true
});
pgClient.connect();
添加?ssl=true
应该可以工作到uri的末尾
var conString = "pg://admin:guest@localhost:5432/Employees?ssl=true";
你必须加上
ssl: true
在json连接中
{
host: 'myHost.com',
user: 'myUser',
password: 'myPassword',
database: 'myDb',
port: 5432,
ssl: true
}
我一次又一次地面对同样的问题。
套餐:
"pg": "^8.5.1",
"pg-hstore": "^2.3.3",
"sequelize": "^6.5.0",
"sequelize-cli": "^6.2.0"
我通过在Sequelize的config.json文件中添加以下内容解决了这个问题
"dialect": "postgres",
"dialectOptions": {
"ssl": {
"rejectUnauthorized": false
}
}
SSL选项可以工作,但也可以更新配置变量PGSSLMODE
或者,如果需要,可以省略ssl配置对象
指定PGSSLMODE config var:heroku config:set
PGSSLMODE=无验证
看
Heroku在其changelog上宣布了此SSL更改,只需通过允许和要求SSL更新您的数据库/config.js文件即可
production: {
use_env_variable: 'DATABASE_URL',
dialect: 'postgresql',
ssl: true,
dialectOptions: {
ssl: { require: true },
},
logging: false,
},
在此之后,可能会遇到另一个问题:nodejs-中的自签名证书出错
如果是这种情况,在创建pg客户端时,无论您在运行节点还是直接使用NODE\u TLS\u REJECT\u UNAUTHORIZED='0'运行节点,都可以添加NODE\u TLS\u REJECT\u UNAUTHORIZED='0'
NODE app.js作为环境变量,此配置为我解决了这个问题。您还可以阅读模块websi上编写的详细文档在这里,谢谢
new pg.client({
connectionString,
ssl: {
rejectUnauthorized: false,
},
})
您需要编辑/etc/postgresql/X.Y/main/pg_hba.conf。您需要添加一行内容,如下所示:“host mydatabase myuser 0.0.0/0 md5”@Rhim为您提供了一个包含该文件完整文档的链接,因此您应该首先参考该链接。@aembke感谢您的回答。@etc/目录在哪里?假设您在linux上运行,它在根目录中。哦,您是说您将此部署到heroku并看到此错误?还是您试图在自己的机器上运行此操作?如果您这样做的话在heroku上执行此操作时,您可能需要首先设置数据库。首先,您应该浏览此指南:。然后,您需要修改代码以使用heroku的环境变量进行连接:。如果您遵循他们的指南,他们应该为您处理pg_hba.conf修改。这是您的应用程序代码中的一个错误。我将打开一个关于这个问题的新问题,它与原来的问题没有任何关系。你也应该在新问题中发布你所有的应用程序代码。谢谢-已经升级到标准-0,没有看到会改变SSL要求的警告,这引起了轻微的恐慌。Heroku最近发出警告说它将强制SSL。他们包括我使用了与上面发布的类似的文档。我按照这些说明操作,我的应用程序今天因为SSL问题而崩溃。我添加了PGSSLMODE config变量,一切都恢复正常。谢谢!另一个选项,稍微干净一点的imo,是在您的sequelizeConfig
:{“方言”:“postgres”,“SSL”:true,“方言选项”:{“ssl”:{“require”:true}}}
在我的案例中,这是有效的,但揭示了一个进一步的错误,正如本q/a所描述和解决的那样:对于我来说,只需要方言选项
使用选项:{方言:'postgres',native:true,ssl:true,方言选项:{ssl:true}“
我的经验,使用Hobby tier Heroku pg:app sequelize连接在没有native:true
的情况下工作,添加此选项会破坏连接。sequelize CLI在这两种情况下都不工作。@碎片整理我添加了关于Hobby Dynothing的提示这是从pg
版本8.5.1
开始的正确解决方案?sslmode=require
而不是?ssl=true
这里有两个关于它的参考文献1)2)
{
host: 'myHost.com',
user: 'myUser',
password: 'myPassword',
database: 'myDb',
port: 5432,
ssl: true
}
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
}
},
});
const Pool = require("pg").Pool;
const proConfig = {
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
}
const pool = new Pool(proConfig);
module.exports = pool;
"pg": "^8.5.1",
"pg-hstore": "^2.3.3",
"sequelize": "^6.5.0",
"sequelize-cli": "^6.2.0"
"dialect": "postgres",
"dialectOptions": {
"ssl": {
"rejectUnauthorized": false
}
}
production: {
use_env_variable: 'DATABASE_URL',
dialect: 'postgresql',
ssl: true,
dialectOptions: {
ssl: { require: true },
},
logging: false,
},
new pg.client({
connectionString,
ssl: {
rejectUnauthorized: false,
},
})