Mongoose连接MongoDB报错ECONNREFUSED:本地服务已运行仍崩溃
排查MongooseServerSelectionError: connect ECONNREFUSED ::1:27017错误
运行代码时出现以下错误:
MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
同时nodemon提示:
[nodemon] app crashed - waiting for file changes before starting...
本地MongoDB服务已处于运行状态,相关代码文件如下:
app.js
const express = require("express"); const app = express(); app.use(express.json()); const product = require("./routes/ProductRoutes"); app.use("/api/v2", product); module.exports = app;
server.js
const app = require("./app"); const dotenv = require("dotenv"); const connectDatabase = require("./db/Database"); dotenv.config({ path: "backend/config/.env", }); connectDatabase(); const server = app.listen(process.env.PORT, () => { console.log(`Server is running on https://localhost:${process.env.PORT}`); });
database.js
const mongoose = require("mongoose"); const connectDatabase = () => { mongoose .connect(process.env.DB_URL, { useNewUrlParser: true, useUnifiedTopology: true, }) .then((data) => { console.log(`mongodb is connected with server: ${data.connection.host}`); }); }; module.exports = connectDatabase;
.env
PORT = 4000 DB_URL = "mongodb://localhost:27017/ecommerce"
问题排查与解决方案
1. .env文件格式错误
当前.env文件中,DB_URL被双引号包裹,且变量名与等号之间存在多余空格,这会导致dotenv解析出的连接地址包含无效字符,直接引发连接失败。
修正后.env:
PORT=4000 DB_URL=mongodb://localhost:27017/ecommerce
- 移除变量值的双引号
- 删除变量名与等号之间的空格
2. IPv6连接兼容性问题
错误中的::1是IPv6格式的localhost,部分环境下MongoDB可能未监听IPv6端口,导致连接被拒绝。
解决方案:将localhost替换为IPv4地址127.0.0.1,强制使用IPv4连接:
DB_URL=mongodb://127.0.0.1:27017/ecommerce
3. 缺少数据库连接错误捕获
当前database.js仅处理了连接成功的回调,未捕获连接失败的错误,无法直观定位问题根源。
修正后database.js:
const mongoose = require("mongoose"); const connectDatabase = () => { mongoose .connect(process.env.DB_URL, { useNewUrlParser: true, useUnifiedTopology: true, }) .then((data) => { console.log(`mongodb is connected with server: ${data.connection.host}`); }) .catch((err) => { console.error("MongoDB连接失败:", err); process.exit(1); // 连接失败时终止进程,避免无意义等待 }); }; module.exports = connectDatabase;
4. 环境变量路径验证
确认server.js中dotenv配置的路径backend/config/.env与项目实际结构匹配。可以在调用connectDatabase()前添加日志,验证环境变量是否正确读取:
console.log("读取的DB_URL:", process.env.DB_URL); console.log("读取的PORT:", process.env.PORT); connectDatabase();
如果输出为undefined,说明路径错误,需调整为正确的相对路径。
内容的提问来源于stack exchange,提问作者Hussain Lemonwala
相关产品推荐
相关产品推荐

