'heroku db connection refused

I am pretty new to heroku and node. While I was trying to connect to heroku db, the following error shows up.

Error: connect ECONNREFUSED 127.0.0.1:5432

I am using connection pooling:

var pg = require('pg');
var heroconfig =process.env.DATABASE_URL || "postgres://jykyslkwkdsvhz:3ba43ff7db0c8dv9a914bac02f55ce944d8ccec31b67f858df3a858faa386c8e@ec2-54-243-214-198.compute-1.amazonaws.com:5432/dfiijlh3fbe3g9";

//var pool1 = new Pool(heroconfig);
var pool1 = new Pool(heroconfig);


app.get('/db', function(req, res){
	pool1.query('SELECT * FROM test_table;',function(err, result){
		if(err){
			res.status(500).send(err.toString());
		} else{
			res.send(JSON.stringify(result.rows));
		}
	});
});

I tried to look at similar questions form other users but could not find solution involving pooling.

Please help.



Solution 1:[1]

I figured it out partially,

Storing the configuration data as object as below makes it works

var heroconfig = {
user: 'username',
database: 'database name',
password: 'some pass word',
host: 'host name',
port: 5432,
max: 10,
idleTimeoutMillis: 30000,
};

However while using the line of code mentioned in my original question, where database url is stored into the variable, it is not working:

var heroconfig =process.env.DATABASE_URL || "postgres://jykyslkwkdsvhz:3ba43ff7db0c8dv9a914bac02f55ce944d8ccec31b67f858df3a858faa386c8e@ec2-54-243-214-198.compute-1.amazonaws.com:5432/dfiijlh3fbe3g9";

I am planning to store my credentials in a different file and require it in my server file which seems to be a better approach.

Solution 2:[2]

I know this is late, but according to the docs in order to use a connection string, you must do this:

const { Pool, Client } = require('pg')
const connectionString = 'postgresql://dbuser:[email protected]:3211/mydb'

const pool = new Pool({
  connectionString: connectionString,
})

See here: https://node-postgres.com/features/connecting#connection-uri

Solution 3:[3]

I have had such an error. After a lot of hours of research, I found out that my server deployed to Heroku was trying to access my PC PostgreSQL database. But it should have connected to the added-on PostgreSQL database in Heroku. I mean my server wasn't connecting to the database link in production mode, it was connecting to the database in development mode. I fixed it in my code like this.

db.js contents:

// focus on const environment
const environment = process.env.NODE_ENV || "development";
const knex = require("knex");
const knexfile = require("./knexfile");

const db = knex(knexfile[environment]);
module.exports = db;

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 ethical coder
Solution 2 ahrobins
Solution 3 Javod Mutalliboev