无法使用Node.js驱动程序本地连接到MongoDB 6.0 Server

2ul0zpep  于 2023-10-16  发布在  Go
关注(0)|答案(4)|浏览(122)

我刚刚开始学习MongoDB,我试图通过MongoDB Server 6.0在本地托管我的Node.js应用程序(不使用Mongoose或Atlas)。
我复制了MongoDB文档中给出的异步JavaScript代码。在执行以下代码之前,我确保运行mongod
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);

抛出错误:

Image of the error it's throwing

holgip5t

holgip5t1#

问题是,localhost别名解析为IPv6地址::1,而不是127.0.0.1
但是,net.ipv6默认为false
最好的选择是使用以下配置启动MongoDB:

net:
  ipv6: true
  bindIpAll: true

net:
  ipv6: true
  bindIp: localhost

然后所有变体都将工作:

C:\>mongosh "mongodb://localhost:27017" --quiet --eval "db.getMongo()"
mongodb://localhost:27017/?directConnection=true&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&appName=mongosh+1.6.0

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

C:\>mongosh "mongodb://%COMPUTERNAME%:27017" --quiet --eval "db.getMongo()"
$ mongosh "mongodb://$HOSTNAME:27017" --quiet --eval "db.getMongo()"
mongodb://******:27017/?directConnection=true&appName=mongosh+1.6.0

如果你不把MongoDB作为一个服务来运行,那么它将是

mongod --bind_ip_all --ipv6 <other options>

NB,我不喜欢配置

net:
  bindIp: <ip_address>

在我看来,这只在具有多个网络接口的计算机上才有意义。然而,由于MongoDB does not support multiple interfaces,它也没有多大意义。此外,根据您的网络设置,此IP可能随时更改。
如果您希望只允许来自本地计算机的连接,请使用bindIp: localhost,例如:当维护时或者当用作web服务的后端数据库时。如果您也希望允许来自远程计算机的连接,请使用bindIpAll: true

kiz8lqtg

kiz8lqtg2#

如果您使用的是节点版本18(IG也适用于17),请使用此选项

mongoose.connect("mongodb://127.0.0.1:27017/newdb", {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});
var db = mongoose.connection;

db.on("error", () => console.log("error connecting to database"));

db.once("open", () => console.log("Connected to database"));
x6yk4ghg

x6yk4ghg3#

问题是,localhost别名解析为IPv6 address::1,而不是127.0.0.1
@Wernfried Domscheit上面的答案。对我来说,
我只是用mongodb://127.0.0.1:27017/dbName替换mongodb://localhost/dbName,它就工作了。

8ljdwjyq

8ljdwjyq4#

你可以试试这个:

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

相关问题