You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express服务器连接MongoDB Atlas报错MongooseServerSelectionError求助

提问:Express连接MongoDB Atlas时出现MongooseServerSelectionError

我正在尝试将Express服务器连接到MongoDB Atlas,但启动时遇到以下错误:

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.

我的Express代码如下:

const express = require("express");
const app = express();
const cors = require("cors");
const mongoose = require("mongoose");
const dotenv = require("dotenv").config();

const authRoutes = require("./routes/auth");
const PORT = process.env.PORT || 5000;

app.use(cors());
app.use(express.json()); 
app.use(express.urlencoded({ extended: true })); 
app.use(express.static("public")); 

// mongoose
mongoose
  .connect(
    "mongodb+srv://<username:password>@cluster1.1h79s.mongodb.net/?retryWrites=true&w=majority&appName=Cluster1"
  )
  .then(() => {
    console.log("MongoDB cennect");
    app.listen(PORT, () => console.log(`Server Port: ${PORT}`));
  })
  .catch((err) => console.log(`${err} did not connect`));

我已经完成了以下验证:

  • 连接URI:已替换为真实的用户名和密码
  • IP白名单:已在MongoDB Atlas安全设置中添加本地IP地址及0.0.0.0/0
  • MongoDB Compass:可以正常连接该Atlas集群

恳请各位提供解决该问题的帮助或建议!


解决方案

1. 检查连接字符串的特殊字符编码

如果你的MongoDB用户名或密码包含@、:、/、#等特殊字符,必须进行URL编码。例如:

  • # → %23
  • @ → %40
  • : → %3A
    确保替换后的连接字符串没有未编码的特殊字符。

2. 确保dotenv配置正确加载

你已经引入了dotenv,但代码中直接硬编码了连接字符串,建议将URI存入.env文件:

MONGO_URI=mongodb+srv://your-encoded-username:your-encoded-password@cluster1.1h79s.mongodb.net/?retryWrites=true&w=majority&appName=Cluster1

然后在代码中使用环境变量调用:

mongoose.connect(process.env.MONGO_URI)

同时确认.env文件位于项目根目录,且没有被.gitignore排除。

3. 升级Mongoose版本

旧版本Mongoose可能与MongoDB Atlas的连接协议不兼容,执行以下命令升级到最新稳定版:

npm install mongoose@latest

4. 排查网络与代理问题

如果处于公司/校园网络,可能存在代理拦截:

  • 切换到个人热点测试连接
  • 若需要代理,在代码中配置代理:
const mongoose = require('mongoose');
const HttpsProxyAgent = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://your-proxy-address:port');

mongoose.connect(process.env.MONGO_URI, {
  proxyAgent: agent
});

5. 检查Atlas集群状态

登录MongoDB Atlas控制台,确认集群处于正常运行状态,无维护或异常告警。

6. 修正代码拼写错误

代码中console.log("MongoDB cennect");存在拼写错误,改为MongoDB connected,避免后续排查混淆。


内容的提问来源于stack exchange,提问作者pppnr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:00:06