简体   繁体   中英

Can't connect to MongoDB 6.0 Server locally using Nodejs driver

I have just started learning about MongoDB and I am trying to host my node.js application locally via MongoDB Server 6.0 (without using mongoose or atlas)

I copied the async javascript code given in the MongoDB docs. I made sure to run mongod before executing the below code MongoDB server started

const { MongoClient } = require("mongodb");

// Connection URI
const uri =
  "**mongodb://localhost:27017**";

// Create a new MongoClient
const client = new MongoClient(uri);

async function run() {
  try {
    // Connect the client to the server (optional starting in v4.7)
    await client.connect();

    // Establish and verify connection
    await client.db("admin").command({ ping: 1 });
    console.log("Connected successfully to server");
  } finally {
    // Ensures that the client will close when you finish/error
    await client.close();
  }
}
run().catch(console.dir);

It's throwing an error: image of the error it's throwing

Problem is, the localhost alias resolves to IPv6 address ::1 instead of 127.0.0.1

However, net.ipv6 defaults to false .

The best option would be to start the MongoDB with this configuration:

net:
  ipv6: true
  bindIpAll: true

or

net:
  ipv6: true
  bindIp: localhost

Then all variants should work:

C:\>mongosh "mongodb://localhost:27017" --quiet --eval "db.getMongo()"
mongodb://localhost:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.0

C:\>mongosh "mongodb://127.0.0.1:27017" --quiet --eval "db.getMongo()"
mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.6.0

C:\>mongosh "mongodb://[::1]:27017" --quiet --eval "db.getMongo()"
mongodb://[::1]:27017/?directConnection=true&appName=mongosh+1.6.0

If you don't run MongoDB as a service then it would be

mongod --bind_ip_all --ipv6 <other options>

NB, I don't like configuration

net:
  bindIp: <ip_address>

in my opinion this makes only sense on a computer with multiple network interfaces. Use bindIp: localhost if you need to prevent any connections from remote computer (eg while maintenance or when used as backend database for a web-service), otherwise use bindIpAll: true

You can try this:

mongoose.connect("mongodb://0.0.0.0:27017").then(() => {
  console.log("database connected)).catch((err) => {
  console.log("error while connecting to database")
})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM