4

I've been trying for over 2 hours now trying to figure out what's wrong with this database. I've tried everything. From reinstalling the server, restarting the processes, rebooting and so much more. It keeps giving me this error when trying to connect:

const serverSelectionError = new ServerSelectionError();
                               ^

MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
    at NativeConnection.Connection.openUri (D:\TheShed\MX_\node_modules\mongoose\lib\connection.js:797:32)
    at D:\TheShed\MX_\node_modules\mongoose\lib\index.js:330:10
    at D:\TheShed\MX_\node_modules\mongoose\lib\helpers\promiseOrCallback.js:32:5
    at new Promise (<anonymous>)
    at promiseOrCallback (D:\TheShed\MX_\node_modules\mongoose\lib\helpers\promiseOrCallback.js:31:10)
    at Mongoose._promiseOrCallback (D:\TheShed\MX_\node_modules\mongoose\lib\index.js:1151:10)
    at Mongoose.connect (D:\TheShed\MX_\node_modules\mongoose\lib\index.js:329:20)
    at module.exports (D:\TheShed\MX_\other\DB\mong.js:4:20)
    at D:\TheShed\MX_\app.js:195:37
    at Object.<anonymous> (D:\TheShed\MX_\app.js:197:3) {
  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: {},
        minWireVersion: 0,
        maxWireVersion: 0,
        roundTripTime: -1,
        lastUpdateTime: 1421094,
        lastWriteDate: 0,
        error: MongoNetworkError: connect ECONNREFUSED ::1:27017
            at connectionFailureError (D:\TheShed\MX_\node_modules\mongodb\lib\cmap\connect.js:293:20)
            at Socket.<anonymous> (D:\TheShed\MX_\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
  }
}

This error wont resolve no matter what I do. The MongoDB server is running, I've checked by doing >show dbs and it lists them perfectly fine. Also, C:/data/db exists and its fine too. What do I do? Here's my connection code:

(async () => {
    await require('./other/DB/mong')();
    console.log("Connected to Database.");
})();

and here's ./other/DB/mong:

var mongoose = require("mongoose");

module.exports = async () => {
    await mongoose.connect('mongodb://localhost:27017/MX', {
        keepAlive: true,
        useNewUrlParser: true,
        useUnifiedTopology: true
    });
    return mongoose;
}
Mlemix
  • 57
  • 1
  • 2
  • 6
  • What happens when you replace localhost with 127.0.0.1 ? – Alex028502 Oct 29 '21 at 03:28
  • Does this answer your question? [Can't connect to MongoDB 6.0 Server locally using Nodejs driver](https://stackoverflow.com/questions/74609210/cant-connect-to-mongodb-6-0-server-locally-using-nodejs-driver) – Wernfried Domscheit May 24 '23 at 13:26

11 Answers11

16

I just found a solution in the internet , If you are using latest nodejs (v17.x) , then try updating mongodb url from localhost to 127.0.0.1

This worked for me :slightly_smiling_face:

bguiz
  • 27,371
  • 47
  • 154
  • 243
Nitish kumar
  • 184
  • 1
  • 3
  • Me too! How strange, I'd been using it fine all day, started a new project and suddenly had to implement this change: many thanks! – elTel Jun 04 '22 at 22:39
3

Updated my mongodb url from 'mongodb://localhost:27017/student' to 'mongodb://127.0.0.1:27017/student' and it worked fine for me

ignatius
  • 47
  • 2
2

MongoDB does not bind to localhost on ipv6 by default.

If you want it to listen on ::1 you will need to enable net.ipv6 and either enable net.bindIpAll or explicitly list the loopback address in net.bindIp

Joe
  • 25,000
  • 3
  • 22
  • 44
  • thank you! this helped me. For those that installed mongo via homebrew, you can edit the config through with vim using: vim /opt/homebrew/etc/mongod.conf – Flinze Nov 24 '21 at 02:35
0

const options = {

useNewUrlParser: true,
useUnifiedTopology: true,
serverSelectionTimeoutMS: 5000,
autoIndex: false, // Don't build indexes
maxPoolSize: 10, // Maintain up to 10 socket connections
serverSelectionTimeoutMS: 5000, // Keep trying to send operations for 5 seconds
socketTimeoutMS: 45000, // Close sockets after 45 seconds of inactivity
family: 4 // Use IPv4, skip trying IPv6

}

0

You need to add family:4 into the connect method.

EmreG
  • 19
  • 2
-1

update from

'mongodb://localhost:27017/myapp' to 'mongodb://127.0.0.1:27017:27017/myapp'

then check to be sure it connects.

mongoose .connect(process.env.DATABASE, { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('DB Connected'));

Jude Okagu
  • 195
  • 2
  • 6
-1

use mongoose.connect("mongodb://127.0.0.1:27017/databasename"); instead of localhost

-1

just change this, mongoose.connect('mongodb://localhost:27017/Database-name'); ---> mongoose.connect("mongodb://127.0.0.1:27017/Database-name");

torq1284
  • 101
  • 1
  • 7
  • Thank you for this code snippet, which might provide some limited, immediate help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you’ve made – Adem kriouane Jan 16 '23 at 13:26
-1

If you are using latest nodejs. If connecting fails on your machine, try using 127.0.0.1 instead of localhost like mongoose.connect('mongodb://127.0.0.1:27017/myapp');

-2

you can also use mongodb://0.0.0.0:27017/database_name

-3

step 1. check MongoDB service is running -> if OK.

try next: step 2. replace 127.0.0.1 from localhost -> this should work 100%