Express-session with connect-mongo MongoServerSelectionError

134 views Asked by At

i am new to the MERN stack. I was learning about express-session with connect-mongo from a tutorial and i keep getting the following error:

**const timeoutError = new error_1.MongoServerSelectionError(Server selection timed out after ${options.serverSelectionTimeoutMS} ms, this.description);
                                 ^
MongoServerSelectionError: connect ECONNREFUSED ::1:27017
    at EventTarget.<anonymous> (D:\udemy2\authentication\passportJS\node_modules\mongodb\lib\sdam\topology.js:276:34)
    at [nodejs.internal.kHybridDispatch] (node:internal/event_target:741:20)
    at EventTarget.dispatchEvent (node:internal/event_target:683:26)
    at abortSignal (node:internal/abort_controller:368:10)
    at TimeoutController.abort (node:internal/abort_controller:402:5)
    at Timeout.<anonymous> (D:\udemy2\authentication\passportJS\node_modules\mongodb\lib\utils.js:1010:92)
    at listOnTimeout (node:internal/timers:569:17)
    at process.processTimers (node:internal/timers:512:7) {
  reason: TopologyDescription {
    type: 'Unknown',
    servers: Map(1) {
      'localhost:27017' => ServerDescription {
        address: 'localhost:27017',
        type: 'Unknown',
        hosts: [],
        passives: [],
        arbiters: [],
        tags: {},
        minWireVersion: 0,
        maxWireVersion: 0,
        roundTripTime: -1,
        lastUpdateTime: 734535,
        lastWriteDate: 0,
        error: MongoNetworkError: connect ECONNREFUSED ::1:27017
            at connectionFailureError (D:\udemy2\authentication\passportJS\node_modules\mongodb\lib\cmap\connect.js:379:20)
            at Socket.<anonymous> (D:\udemy2\authentication\passportJS\node_modules\mongodb\lib\cmap\connect.js:285:22)
            at Object.onceWrapper (node:events:629:26)
            at Socket.emit (node:events:514:28)
            at emitErrorNT (node:internal/streams/destroy:151:8)
            at emitErrorCloseNT (node:internal/streams/destroy:116:3)
            at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
          [Symbol(errorLabels)]: Set(1) { 'ResetPool' },
          [cause]: Error: connect ECONNREFUSED ::1:27017
              at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16) {
            errno: -4078,
            code: 'ECONNREFUSED',
            syscall: 'connect',
            address: '::1',
            port: 27017
          }
        },
        topologyVersion: null,
        setName: null,
        setVersion: null,
        electionId: null,
        logicalSessionTimeoutMinutes: null,
        primary: null,
        me: null,
        '$clusterTime': null
      }
    },
    stale: false,
    compatible: true,
    heartbeatFrequencyMS: 10000,
    localThresholdMS: 15,
    setName: null,
    maxElectionId: null,
    maxSetVersion: null,
    commonWireVersion: 0,
    logicalSessionTimeoutMinutes: null
  },
  code: undefined,
  [Symbol(errorLabels)]: Set(0) {},
  [cause]: MongoNetworkError: connect ECONNREFUSED ::1:27017
      at connectionFailureError (D:\udemy2\authentication\passportJS\node_modules\mongodb\lib\cmap\connect.js:379:20)
      at Socket.<anonymous> (D:\udemy2\authentication\passportJS\node_modules\mongodb\lib\cmap\connect.js:285:22)
      at Object.onceWrapper (node:events:629:26)
      at Socket.emit (node:events:514:28)
      at emitErrorNT (node:internal/streams/destroy:151:8)
      at emitErrorCloseNT (node:internal/streams/destroy:116:3)
      at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
    [Symbol(errorLabels)]: Set(1) { 'ResetPool' },
    [cause]: Error: connect ECONNREFUSED ::1:27017
        at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1495:16) {
      errno: -4078,
      code: 'ECONNREFUSED',
      syscall: 'connect',
      address: '::1',
      port: 27017
    }
  }
}.**

I did some research and it said that it might be because my server isnt running but when i open "Services" it says its up. I tried restarting it multiple times but it didnt help. Here is my code:

const express = require("express");
const session = require("express-session");
const mongoose = require("mongoose")
const MongoStore = require("connect-mongo");

const app = express();

app.use(express.urlencoded({extended: true}))

const connection = mongoose.createConnection("mongodb://127.0.0.1/testDB", {useNewUrlParser: true})

app.use(session({
    secret: 'keyboard cat',
    saveUninitialized: false, // don't create session until something stored
    resave: false, //don't save session if unmodified
    store: MongoStore.create({
      mongoUrl: 'mongodb://localhost/test-app',
      touchAfter: 24 * 3600 // time period in seconds
    })
  }));

app.get("/", (req,res)=>{
    res.send("...")
})

app.listen(3000, ()=>{
    console.log("server is running")
})

Thanks in advance

2

There are 2 answers

0
Kamran On

If you are sure mongo server is running then Your app is not able to connect to mongo server, in that case check your Mongo conf file.

Linux: /etc/mongod.conf
macOS: /usr/local/etc/mongod.conf (on Intel processors), or /opt/homebrew/etc/mongod.conf (on apple M1 processors)
Windows: <install directory>\bin\mongod.cfg

your bindip value should look like

net:
  bindIp: 127.0.0.1, ::1
  ipv6: true
0
Akeel Ahmed Qureshi On

You can try this code :

const mongoose = require("mongoose");

mongoose.connect("mongodb://127.0.0.1/testDB", {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

const db = mongoose.connection;

db.on("error", (error) => {
  console.error("MongoDB connection error:", error);
});

db.once("open", () => {
  console.log("Connected to MongoDB");
  
  //rest of the code..........
});