尝试访问localhost中的数据库时,如何解决“错误:服务器不支持SSL连接”?

时间:2019-01-22 05:59:26

标签: node.js postgresql heroku

我正在遵循Heroku的node.js tutorial来配置Postgres数据库。 创建简单表并连接到localhost:5000 / db后,出现错误消息“错误:服务器不支持SSL连接”。

我一直在寻找解决方案达数小时之久,但似乎无法解决。对你的帮助表示感谢。谢谢!

4 个答案:

答案 0 :(得分:5)

在这里,我提供了此问题的解决方法,而不是本文的标题。从总体上看,更好的答案可能是解决为本地计算机配置SSL。

我来到这里的目的是解决完成问题中提到的Heroku教程并设置Postgres数据库以在本地和远程工作的问题。

const pool = new Pool({
    connectionString: process.env.DATABASE_URL || 'postgresql://postgres:<your admin password>@localhost:5432/<your db name>',
    ssl: process.env.DATABASE_URL ? true : false
})

我的想法是在部署的应用程序上使用SSL,但在本地计算机上完全避开SSL。通过简单地跳过本地计算机上的SSL配置,我可以集中精力开发仍然使用Heroku内置SSL的可运行应用程序。

我使用Heroku环境变量来检测它们相对于我自己的环境,并在上面的代码示例中相应地选择值。对我来说,这在本地和远程都有效。

答案 1 :(得分:1)

我在完成教程后设置本地环境时遇到了同样的问题。坚持使用命令 heroku local 来启动我的服务器为我修复了它。本教程的 Run the app locally 部分详细介绍了此命令。

就我而言,我使用 React + Webpack 添加了一个 Express 服务器和一个客户端。我用于本地开发的 package.json 脚本如下所示:

"dev": "run-p dev:*",
"dev:server": "heroku local -f Procfile.dev",
"dev:webpack": "webpack --watch --config webpack.dev.js --mode development",
  • run-p 只是来自 npm-run-all 以同时运行所有以 dev 开头的脚本。
  • 服务器使用 heroku local 命令和特定的 Procfile 进行本地开发(使用 -f 标志执行此操作),我使用 nodemon 在本地启动服务器以注意变化(请参阅下面的 Procfile.dev)。
  • webpack 脚本使用 React 在客户端构建和监视更改。

Procfile.dev 用于本地开发:

web: nodemon index.js

Procfile 用于生产:

web: node --optimize_for_size --max_old_space_size=920 --gc_interval=100 index.js

然后用于从 Provision a database 部分连接到数据库的相同代码适用于我:

const { Pool } = require('pg');
const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
  ssl: {
    rejectUnauthorized: false
  }
});

答案 2 :(得分:1)

这是 Heroku 今天在 2021 年使用的新形式,他们在连接中做了一些小的更正。

const pool = (() => {
if (process.env.NODE_ENV !== 'production') {
    return new Pool({
        connectionString: process.env.DATABASE_URL,
        ssl: false
    });
} else {
    return new Pool({
        connectionString: process.env.DATABASE_URL,
        ssl: {
            rejectUnauthorized: false
          }
    });
} })();

它们发生了一些变化,使用这种方式您可以保持本地和 Heroku 可用。

答案 3 :(得分:0)

此SSL问题与Heroku无关,但与Postgresql有关。如果您不想处理它,我建议像示例中那样使用ssl:false。

pip list | grep tensorflow
tensorflow            1.14.0             
tensorflow-estimator  1.14.0             
tensorflow-gpu        1.14.0        
  

警告

Heroku并未在初始文档中确切说明如何使用 DATABASE_URL 。因此,您必须按照以下步骤在与 index.js 相同的目录中编辑 .env 文件。

const pool=new Pool({
  connectionString:process.env.DATABASE_URL,
  ssl:false
})
  

在尝试删除不可忘记的内容时,DATABASE_URL='postgres://username:password@localhost:5432/postgres'