最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

postgresql - Connecting to Postgres database using javascript - Stack Overflow

programmeradmin0浏览0评论

Apologies if this is a bad question but I've been troubleshooting for a while now and don't understand where the issue lies.

I have a db.js file that is meant to login and connect to my local postgres database. It pulls the login information from a .env file. When I run debugger on the db.js file I am able to connect and the login information shows in the console as loading correctly. I have an app.js file that is calling the connectDb function which is exported from my db.js file. When I run the debugger or try to run the app through the command line I get the error below:

Error connecting to the database: error: role "your-username" does not exist"

To be clear I did not edit the username out, that is the exact error message.

Below is the entirety of app.js where I'm trying to call the connectDb function from db.js.

require('dotenv').config();
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const playerRoutes = require('./routes/playerRoutes');
const { connectDb } = require('./config/db.js');

const app = express();
const PORT = process.env.PORT || 5000;

// Middleware
app.use(cors());
app.use(bodyParser.json());

// Routes
app.use('/api', playerRoutes);

// Connect to DB and start server
//connectDb().then(() => {
//  app.listen(PORT, () => {
//    console.log(`Server running on port ${PORT}`);
//  });
//});
//console.log(process.env);

console.log('APP.js - Connecting with the following config:', {
  user: process.env.DB_USER,
  host: process.env.DB_HOST,
  database: process.env.DB_NAME,
  password: process.env.DB_PASSWORD,
  port: process.env.DB_PORT || 5432,
});

const startServer = async () => {
  try {
    await connectDb(); // Wait for DB connection before starting the server
    app.listen(PORT, () => {
      console.log(`Server running on port ${PORT}`);
    });
  } catch (error) {
    console.error('Failed to start the server due to DB connection error:', error);
    process.exit(1); // Exit the application in case of DB connection failure
  }
};

startServer(); // Start the server after DB connection is established

The console.log('App.js - Connecting .....' displays the correct login information. And just in case it's helpful below is the db.js file:

require('dotenv').config();
console.log('DB_USER:', process.env.DB_USER);
console.log('DB_PASSWORD:', process.env.DB_PASSWORD);
console.log('DB_HOST:', process.env.DB_HOST);
console.log('DB_NAME:', process.env.DB_NAME);

const { Pool } = require('pg');

const pool = new Pool({
  user: process.env.DB_USER,
  host: process.env.DB_HOST,
  database: process.env.DB_NAME,
  password: process.env.DB_PASSWORD,
  port: process.env.DB_PORT,
});

console.log('Connecting with user: ', process.env.DB_USER);

const connectDb = async () => {
  try {
    await pool.connect();
    console.log('Connected to the database');
  } catch (error) {
    console.error('Error connecting to the database:', error);
    process.exit(1); // Exit the application in case of DB connection failure
  }
};

module.exports = { connectDb };

It feels like there's some timing issue going on between the two and the connectDb function is using default values but I've tried to log the function both before and during the call and both show the correct login information. I don't see anywhere in my .env file that indicates a "your-username" should exist. I've even tried hardcoding in the values into the db.js file and the issue still occurs. To summarize - in the startServer function in app.js I'm calling the connectDb function which is exported from db.js. The connection works when I debug on db.js but not when I debug on app.js.

Can anyone offer insight into my issue? Thanks in advance!

EDIT: Below is from the postgres log file.

2025-02-03 16:08:42.140 CST [7140] LOG:  disconnection: session time: 0:00:00.188 user=NbaUser database=NBAProject host=::1 port=62224
2025-02-03 16:09:22.678 CST [13796] LOG:  connection received: host=::1 port=62252
2025-02-03 16:09:22.679 CST [18976] LOG:  connection received: host=::1 port=62254
2025-02-03 16:09:22.679 CST [13796] LOG:  connection authenticated: user="your-username" method=trust (D:/Program Files/PostgreSQL/17/data/pg_hba.conf:117)
2025-02-03 16:09:22.679 CST [13796] LOG:  connection authorized: user=your-username database=nba_stats
2025-02-03 16:09:22.679 CST [13796] FATAL:  role "your-username" does not exist
2025-02-03 16:09:22.680 CST [22404] LOG:  connection received: host=::1 port=62253
2025-02-03 16:09:22.680 CST [18976] LOG:  connection authenticated: user="NbaUser" method=trust (D:/Program Files/PostgreSQL/17/data/pg_hba.conf:117)
2025-02-03 16:09:22.680 CST [18976] LOG:  connection authorized: user=NbaUser database=NBAProject
2025-02-03 16:09:22.681 CST [22404] LOG:  connection authenticated: user="NbaUser" method=trust (D:/Program Files/PostgreSQL/17/data/pg_hba.conf:117)
2025-02-03 16:09:22.681 CST [22404] LOG:  connection authorized: user=NbaUser database=NBAProject
2025-02-03 16:09:22.753 CST [22404] LOG:  could not receive data from client: An existing connection was forcibly closed by the remote host.

Apologies if this is a bad question but I've been troubleshooting for a while now and don't understand where the issue lies.

I have a db.js file that is meant to login and connect to my local postgres database. It pulls the login information from a .env file. When I run debugger on the db.js file I am able to connect and the login information shows in the console as loading correctly. I have an app.js file that is calling the connectDb function which is exported from my db.js file. When I run the debugger or try to run the app through the command line I get the error below:

Error connecting to the database: error: role "your-username" does not exist"

To be clear I did not edit the username out, that is the exact error message.

Below is the entirety of app.js where I'm trying to call the connectDb function from db.js.

require('dotenv').config();
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const playerRoutes = require('./routes/playerRoutes');
const { connectDb } = require('./config/db.js');

const app = express();
const PORT = process.env.PORT || 5000;

// Middleware
app.use(cors());
app.use(bodyParser.json());

// Routes
app.use('/api', playerRoutes);

// Connect to DB and start server
//connectDb().then(() => {
//  app.listen(PORT, () => {
//    console.log(`Server running on port ${PORT}`);
//  });
//});
//console.log(process.env);

console.log('APP.js - Connecting with the following config:', {
  user: process.env.DB_USER,
  host: process.env.DB_HOST,
  database: process.env.DB_NAME,
  password: process.env.DB_PASSWORD,
  port: process.env.DB_PORT || 5432,
});

const startServer = async () => {
  try {
    await connectDb(); // Wait for DB connection before starting the server
    app.listen(PORT, () => {
      console.log(`Server running on port ${PORT}`);
    });
  } catch (error) {
    console.error('Failed to start the server due to DB connection error:', error);
    process.exit(1); // Exit the application in case of DB connection failure
  }
};

startServer(); // Start the server after DB connection is established

The console.log('App.js - Connecting .....' displays the correct login information. And just in case it's helpful below is the db.js file:

require('dotenv').config();
console.log('DB_USER:', process.env.DB_USER);
console.log('DB_PASSWORD:', process.env.DB_PASSWORD);
console.log('DB_HOST:', process.env.DB_HOST);
console.log('DB_NAME:', process.env.DB_NAME);

const { Pool } = require('pg');

const pool = new Pool({
  user: process.env.DB_USER,
  host: process.env.DB_HOST,
  database: process.env.DB_NAME,
  password: process.env.DB_PASSWORD,
  port: process.env.DB_PORT,
});

console.log('Connecting with user: ', process.env.DB_USER);

const connectDb = async () => {
  try {
    await pool.connect();
    console.log('Connected to the database');
  } catch (error) {
    console.error('Error connecting to the database:', error);
    process.exit(1); // Exit the application in case of DB connection failure
  }
};

module.exports = { connectDb };

It feels like there's some timing issue going on between the two and the connectDb function is using default values but I've tried to log the function both before and during the call and both show the correct login information. I don't see anywhere in my .env file that indicates a "your-username" should exist. I've even tried hardcoding in the values into the db.js file and the issue still occurs. To summarize - in the startServer function in app.js I'm calling the connectDb function which is exported from db.js. The connection works when I debug on db.js but not when I debug on app.js.

Can anyone offer insight into my issue? Thanks in advance!

EDIT: Below is from the postgres log file.

2025-02-03 16:08:42.140 CST [7140] LOG:  disconnection: session time: 0:00:00.188 user=NbaUser database=NBAProject host=::1 port=62224
2025-02-03 16:09:22.678 CST [13796] LOG:  connection received: host=::1 port=62252
2025-02-03 16:09:22.679 CST [18976] LOG:  connection received: host=::1 port=62254
2025-02-03 16:09:22.679 CST [13796] LOG:  connection authenticated: user="your-username" method=trust (D:/Program Files/PostgreSQL/17/data/pg_hba.conf:117)
2025-02-03 16:09:22.679 CST [13796] LOG:  connection authorized: user=your-username database=nba_stats
2025-02-03 16:09:22.679 CST [13796] FATAL:  role "your-username" does not exist
2025-02-03 16:09:22.680 CST [22404] LOG:  connection received: host=::1 port=62253
2025-02-03 16:09:22.680 CST [18976] LOG:  connection authenticated: user="NbaUser" method=trust (D:/Program Files/PostgreSQL/17/data/pg_hba.conf:117)
2025-02-03 16:09:22.680 CST [18976] LOG:  connection authorized: user=NbaUser database=NBAProject
2025-02-03 16:09:22.681 CST [22404] LOG:  connection authenticated: user="NbaUser" method=trust (D:/Program Files/PostgreSQL/17/data/pg_hba.conf:117)
2025-02-03 16:09:22.681 CST [22404] LOG:  connection authorized: user=NbaUser database=NBAProject
2025-02-03 16:09:22.753 CST [22404] LOG:  could not receive data from client: An existing connection was forcibly closed by the remote host.
Share Improve this question edited Feb 3 at 22:16 Dolesy asked Feb 3 at 19:19 DolesyDolesy 214 bronze badges 14
  • 1 role "your-username" does not exist indicates to me that process.env.DB_USER, is not being used and that the connection is falling back to using the OS username that is being used to run the program. Look at the Postgres log and see what is actually hitting the database. – Adrian Klaver Commented Feb 3 at 20:02
  • Thanks Adrian, I've looked at the logs and it's showing the following error repeatedly: 2025-02-03 13:02:52.254 CST [6720] FATAL: role "your-username" does not exist 2025-02-03 13:02:52.328 CST [6724] LOG: could not receive data from client: An existing connection was forcibly closed by the remote host. – Dolesy Commented Feb 3 at 20:03
  • 1 "When I run debugger on the db.js file I am able to connect and the login information shows in the console as loading correctly." - how exactly are you doing that? "I have an app.js file that is calling [the exported function from the other] file. When I run the debugger or try to run the app through the command line I get the error" - how exactly are you running that? And what login information does it show in the console before the error? If that already has 'your-username', your problem has nothing to do with postgres. – Bergi Commented Feb 3 at 22:08
  • 1 When you run the debugger with app.js, what gets printed in the console? Does it print the correct env values from your .env file? – Prerak Sola Commented Feb 3 at 22:08
  • 1 "I have an app.js file that is calling the connectDb function which is exported from my db.js file." - please edit your question to include the complete app.js file (or at least the parts that are necessary to reproduce the problem if we wanted to run it ourselves). Specifically, how are you doing the import? – Bergi Commented Feb 3 at 22:09
 |  Show 9 more comments

1 Answer 1

Reset to default 1

In pg_hba.conf, I had all the connection settings set to trust. When I changed them to require MD5 login method and then set a windows environment variable for PGUSER=myuser, I was able to connect.

发布评论

评论列表(0)

  1. 暂无评论