【发布时间】: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