【问题标题】:How can I connect my local node.js app to my Heroku Postgres database?如何将我的本地 node.js 应用程序连接到我的 Heroku Postgres 数据库?
【发布时间】:2020-12-30 19:32:18
【问题描述】:

当节点应用程序部署到 Heroku 时,我已经设法让我的 Node.js 应用程序与我的 Heroku Postgres 数据库一起正常工作。但是,每次我进行代码更改时都必须部署到 heroku 有点费力,我宁愿能够在本地开发并从我的本地应用程序连接到数据库。

https://devcenter.heroku.com/articles/connecting-to-heroku-postgres-databases-from-outside-of-heroku

上面的文章并没有真正描述这是如何完成的,我不确定我需要做什么。

如果我尝试在本地运行我的应用程序并访问查询我的数据库的端点

Error Error: connect ECONNREFUSED 127.0.0.1:5432

而如果我从 Heroku 部署的应用程序访问相同的端点,它可以正常工作。

这是我的应用程序

const express = require('express')
const path = require('path')
const PORT = process.env.PORT || 5000;
const { Pool } = require('pg');

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

express()
  .use(express.static(path.join(__dirname, 'public')))
  .set('views', path.join(__dirname, 'views'))
  .set('view engine', 'ejs')
  .get('/', (req, res) => res.render('pages/index'))
    .get('/users', async (req, res) => {
        try {
            const client = await pool.connect();
            const result = await client.query('SELECT * FROM users');
            const results = { 'results': (result) ? result.rows : null};
            console.log(results);
            res.status(200).json(results);
        } catch (err) {
            console.error(err);
            res.send("Error " + err);
        }
    })
  .listen(PORT, () => console.log(`Listening on ${ PORT }`));

【问题讨论】:

  • 我认为您需要更新本地计算机上的process.env.DATABASE_URL。从错误来看,当您想使用托管在 Heroku 上的数据库时,DATABASE_URL 似乎引用了 localhost。
  • 我拥有并想要使用的唯一数据库是 Heroku 托管的远程数据库。 DATABASE_URL 指向该远程数据库。我真的不想使用本地托管的数据库,因为我必须维护两个单独的数据库实例和模式。本质上,我只是希望能够从本地应用程序访问远程数据库,但是这样做时会出现 ECONNREFUSED 错误
  • 我了解您只想使用远程数据库。错误提示您无法连接到127.0.0.1:5432。这是本地主机的 IP 地址,而不是远程数据库。您的代码出于某种原因尝试连接到127.0.0.1:5432,而它应该尝试连接到远程数据库。
  • @YousufKhan 我不知道我是怎么错过的。我刚刚用实际的连接字符串替换了 DATABASE_URL,现在它工作得很好。谢谢你。如果您想在下面发布答案,我会将其标记为正确。
  • 好的,谢谢,我很高兴能帮上忙

标签: node.js postgresql express heroku


【解决方案1】:

我认为您需要更新本地计算机上的 process.env.DATABASE_URL。从错误来看,当您想使用 Heroku 上托管的数据库时,DATABASE_URL 似乎引用了 localhost。

我了解您只想使用远程数据库。该错误表示您无法连接到 127.0.0.1:5432。这是本地主机的 IP 地址,而不是远程数据库。您的代码出于某种原因尝试连接到 127.0.0.1:5432,而它应该尝试连接到远程数据库。

【讨论】:

    【解决方案2】:

    您是否使用 dotenv 访问 process.env.DATABASE_URL ? 你需要 dotenv.config();为我工作。

    【讨论】:

      猜你喜欢
      • 2018-07-05
      • 2013-10-05
      • 1970-01-01
      • 2020-10-14
      • 2013-09-05
      • 2012-06-08
      • 2013-02-05
      • 2013-07-20
      • 1970-01-01
      相关资源
      最近更新 更多