Jahn E.
Jahn E.

Reputation: 1313

timeoutError - MongoServerSelectionError: connect ECONNREFUSED ::1:27017 - [NodeJS + MongoDB]

Disclaimer: Similar topics did not offer a valid solution for my problem!

However, I still get the following error:

const timeoutError = new error_1.MongoServerSelectionError(`Server selection timed out after ${serverSelectionTimeoutMS} ms`, this.description);                                     ^
 
MongoServerSelectionError: connect ECONNREFUSED ::1:27017
    at Timeout._onTimeout (\node_modules\mongodb\lib\sdam\topology.js:330:38)
    at listOnTimeout (node:internal/timers:557:17)
    at processTimers (node:internal/timers:500:7) {
  reason: TopologyDescription {
    type: 'Unknown',
    servers: Map(1) {
      'localhost:27017' => ServerDescription {
        _hostAddress: HostAddress { isIPv6: false, host: 'localhost', port: 27017 },
        address: 'localhost:27017',
        type: 'Unknown',
        hosts: [],
        passives: [],
        arbiters: [],
        tags: {},
        maxWireVersion: 0,
        roundTripTime: -1,
        lastUpdateTime: 536295834,
        lastWriteDate: 0,
        error: MongoNetworkError: connect ECONNREFUSED ::1:27017
            at connectionFailureError (\node_modules\mongodb\lib\cmap\connect.js:293:20)
            at Socket.<anonymous> (\node_modules\mongodb\lib\cmap\connect.js:267:22)
            at Object.onceWrapper (node:events:510:26)
            at Socket.emit (node:events:390:28)
            at emitErrorNT (node:internal/streams/destroy:164:8)
            at emitErrorCloseNT (node:internal/streams/destroy:129:3)
            at processTicksAndRejections (node:internal/process/task_queues:83:21)
      }
    },
    stale: false,
    compatible: true,
    heartbeatFrequencyMS: 10000,
    localThresholdMS: 15,
    logicalSessionTimeoutMinutes: undefined
  }
}

My dependencies:

 "dependencies": {
    "ejs": "^3.1.6",
    "express": "^4.17.1",
    "mongodb": "^4.0.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.7"
  }

FYI: Node.js v17.0.1

Update: Here is my database.js file

const mongodb = require('mongodb');

const MongoClient = mongodb.MongoClient;

let database;

async function connectToDatabase() {
  const client = await MongoClient.connect('mongodb://localhost:27017');
  database = client.db('file-demo');
}

function getDb() {
  if (!database) {
    throw { message: 'Database not connected!' };
  }
  return database;
}

module.exports = {
  connectToDatabase: connectToDatabase,
  getDb: getDb,
};

Here is my app.js:

const path = require('path');

const express = require('express');

const userRoutes = require('./routes/users');
const db = require('./data/database');

const app = express();

app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

app.use(express.urlencoded({ extended: false }));
app.use(express.static('public'));

app.use(userRoutes);

db.connectToDatabase().then(function () {
  app.listen(3000);
});

Upvotes: 4

Views: 26649

Answers (4)

btm me
btm me

Reputation: 653

connect like this 

     
    // MongoDB connection options
    const options = {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      serverSelectionTimeoutMS: 30000, // Increased timeout value
      maxPoolSize: 50,
      wtimeoutMS: 25000,
    socketTimeoutMS: 60000,
    };
    
    const mongoURL = 'mongodb://127.0.0.1:27017/dbgstf';
const dbName = 'dbgstf';

    
    app.use(express.json());
    
    mongoose.connect(mongoURL, {
      useNewUrlParser: true,
      useUnifiedTopology: true,
      serverSelectionTimeoutMS: 5000,
    })
      .then(() => {
        console.log('Database connected successfully!');
      })
      .catch((err) => {
        console.error('Error connecting to the database', err);
        process.exit(1); // Exit the application if database connection fails
      });

Upvotes: 0

Arafat Alim
Arafat Alim

Reputation: 91

In my case I replaced the hostname

localhost

to

127.0.0.1

Try change from

async function connectToDatabase(){
const client = await MongoClient.connect('mongodb://localhost:27017');
 database = client.db('file-demo');
}

to

async function connectToDatabase() {
 const client = await MongoClient.connect('mongodb://127.0.0.1:27017');
 database = client.db('file-demo');
}

Upvotes: 9

Ian
Ian

Reputation: 2610

For me the issue was that I was not running the mongodb service after I had installed it.

On mac, run:

brew services start [email protected]

Upvotes: 3

Jahn E.
Jahn E.

Reputation: 1313

As @prasad_ pointed out, it can help to change localhost to 127.0.0.1, in the file, in which you are establishing your connection to the MongoDB Server. Although they should be treated as synonyms and as I was able to rule out the general problems (which you can find as an answer in similar questions) this might just be a caching issue with chrome, like in here.

Upvotes: 23

Related Questions