问题:我正在使用 MongoDB Atlas 和 Mongoose 开发 Node.js 后端。服务器在端口 8080 上运行良好,但在尝试连接到 MongoDB 集群时出现以下错误:
MongoDB connection error: MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your Atlas cluster's IP whitelist: https://www.mongodb.com/docs/atlas/security-whitelist/
我已采取的步骤:
白名单IP:我当前的IP已列入白名单,我什至将网络访问权限设置为允许来自任何地方(0.0.0.0/0)的连接。 在其他工具中连接成功: 我可以使用 mongosh 连接到数据库,没有任何问题。 MongoDB Compass 也能够成功连接。 网络访问:我已验证集群的网络访问配置是否正确。
const mongoose = require("mongoose");
mongoose
.connect(
`mongodb+srv://<username>:<password>@cluster0.0sgfn.mongodb.net/eateasy?retryWrites=true&w=majority&appName=Cluster0`
)
.then(() => {
console.log("MongoDB connected...");
})
.catch((err) => {
console.log("MongoDB connection error:", err);
});
我尝试过的:
多次重启服务器。 重新检查我的 IP 白名单设置。 已验证 URI 凭据是否正确。 问题:
为什么我能够通过 mongosh 和 MongoDB Compass 进行连接,但不能通过使用 Mongoose 的 Node.js 后端进行连接? 为了使此连接正常工作,我可能缺少任何其他网络设置或配置吗?
@Kartik 这里是 Node.js 中 mongoose 连接的完整文件
mongoose.js 配置文件: 只需使用您的凭据更改环境变量即可。
"use strict";
const mongoose = require("mongoose");
const config = require("../config");
mongoose.set("strictQuery", true);
mongoose.pluralize(null); // STOP auto pluralize
require("dotenv").config();
async function connectToDB() {
try {
let mongoObj = config.db.mongo;
await mongoose.connect(mongoObj.fullUri, {
useNewUrlParser: true,
useUnifiedTopology: true,
});
const db = mongoose.connection;
db.on("error", console.error.bind(console, "MongoDB connection error: "));
db.once("open", function () {
console.log(`MongoDB connected successfully: ${mongoObj.dbName}`, mongoObj.fullUri);
});
} catch (error) {
console.error("MongoDB connection error:", error);
throw new Error("MongoDB connection error occurred.");
}
}
module.exports = connectToDB;
请尝试使用此代码,希望这能解决您的问题。