MERN项目重启后Mongoose连接MongoDB失败:ECONNREFUSED 127.0.0.1:27017
解决MERN项目中MongoDB连接被拒绝(ECONNREFUSED 127.0.0.1:27017)的问题
问题详情
重启MERN应用后触发连接错误,同时MongoDB Compass也无法连接本地MongoDB服务,错误日志如下:
MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017 at NativeConnection.Connection.openUri (/Users/vaibhav/Desktop/Development/MERN PROJECT/node_modules/mongoose/lib/connection.js:824:32) at /Users/vaibhav/Desktop/Development/MERN PROJECT/node_modules/mongoose/lib/index.js:381:10 at /Users/vaibhav/Desktop/Development/MERN PROJECT/node_modules/mongoose/lib/helpers/promiseOrCallback.js:41:5 at new Promise (<anonymous>) at promiseOrCallback (/Users/vaibhav/Desktop/Development/MERN PROJECT/node_modules/mongoose/lib/helpers/promiseOrCallback.js:40:10) at Mongoose._promiseOrCallback (/Users/vaibhav/Desktop/Development/MERN PROJECT/node_modules/mongoose/lib/index.js:1234:10) at Mongoose.connect (/Users/vaibhav/Desktop/Development/MERN PROJECT/node_modules/mongoose/lib/index.js:380:20) at connectDataBase (/Users/vaibhav/Desktop/Development/MERN PROJECT/backend/config/dataBase.js:7:10) at Object.<anonymous> (/Users/vaibhav/Desktop/Development/MERN PROJECT/backend/server.js:17:1) at Module._compile (node:internal/modules/cjs/loader:1126:14) { reason: TopologyDescription { type: 'Unknown', servers: Map(1) { 'localhost:27017' => [ServerDescription] }, stale: false, compatible: true, heartbeatFrequencyMS: 10000, localThresholdMS: 15, setName: null, maxElectionId: null, maxSetVersion: null, commonWireVersion: 0, logicalSessionTimeoutMinutes: null }, code: undefined }
相关配置与代码:config.env文件:
PORT = 4000 DB_URI = "mongodb://localhost:27017/Ecommerce" JWT_SECRET=JBRON098SROINRIOUHOHSDOKFN948HIFRCN JWT_EXPIRE=5d COOKIE_EXPIRE = 5
app.js文件:
const app = require('./app') const dotenv = require('dotenv') const connectDataBase = require("./config/dataBase") //Handling uncaught exception process.on("uncaughtException", (err) => { console.log(`Error: , ${err.message}`); console.log(`Shutting down server due to unhandled promise rejection`); process.exit(1); }) //config file dotenv.config({path:"backend/config/config.env"}); //Calling the function to connect the database connectDataBase(); const server = app.listen(process.env.PORT, ()=>{ console.log(`The server has started at http://localhost/${process.env.PORT}`); })
设备环境:MacBook Air M2,macOS Ventura 13.0.1
分步解决方案
1. 确认MongoDB服务是否启动
这是ECONNREFUSED错误的最常见原因:
- 系统偏好设置方式:打开系统偏好设置,拉至底部找到MongoDB图标,若显示「Stopped」则点击「Start」启动服务。
- 终端命令方式:
- 启动服务:
brew services start mongodb-community - 检查服务状态:
确认brew services listmongodb-community条目状态为started。 - 手动安装版本启动命令(非Homebrew安装):
mongod --config /usr/local/etc/mongod.conf
- 启动服务:
2. 检查27017端口是否被占用
如果服务启动失败,可能是端口被其他程序占用:
- 查询端口占用进程:
lsof -i :27017 - 杀死占用进程(替换
<PID>为查询到的进程ID):
之后重新启动MongoDB服务。kill -9 <PID>
3. 修正DB_URI的格式问题
当前config.env中的DB_URI带有双引号,可能导致dotenv解析异常,修改为:
DB_URI=mongodb://localhost:27017/Ecommerce
移除连接字符串前后的双引号。
4. 验证基础连接有效性
服务启动后,先通过终端测试连接:
- 使用旧版客户端:
mongo - 使用新版客户端:
若能成功进入MongoDB shell,再尝试启动MERN应用和MongoDB Compass连接。mongosh mongodb://localhost:27017/Ecommerce
5. 修复损坏的MongoDB安装
若以上步骤无效,可能是安装文件损坏:
- 卸载现有版本:
brew services stop mongodb-community brew uninstall mongodb-community - 重新安装最新版本:
安装完成后启动服务并再次测试连接。brew tap mongodb/brew brew install mongodb-community
内容的提问来源于stack exchange,提问作者Vaibhav Sharma
相关产品推荐
相关产品推荐

