Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js,PostgreSQL错误:没有主机的pg_hba.conf条目_Node.js_Postgresql_Express_Heroku - Fatal编程技术网

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

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 "...", ... 我如何创建一个应用程序,我应该将它放在我的应用程序目录中的什么位置 下面是整个错误消息。我

我正在关注这篇文章(()。我已经将我的应用程序部署到heroku,目前正在使用express node.js尝试连接到我刚刚安装的heroku中的PostgresSQL数据库。我在文章的最后使用了这个命令

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,
  },
})