Node.js与MongoDB连接失败求助:代码同教程却无法连接
无法通过Mongoose连接MongoDB Compass的排查与解决
1. 先修复代码中的明显错误
你提供的代码存在两处关键问题:
- 语法错误:
useUnifiedTropology: true末尾缺少逗号,导致JS解析失败 - 拼写错误:数据库名称
registartion多了一个字母t,正确应为registration - 配置项拼写错误:
useUnifiedTropology里的Tropology应为Topology(小写o)
修正后的代码:
const mongoose = require("mongoose"); mongoose.connect("mongodb://localhost:27017/registration", { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true }).then(() => { console.log(`connection successful`); }).catch((e) => { console.log(`no connection`, e); // 建议添加错误详情,方便定位问题 })
2. 检查MongoDB服务状态
如果代码修正后仍无法连接,先确认本地MongoDB服务是否正在运行:
- Windows:打开「服务」面板,找到MongoDB服务,确保状态为「正在运行」;也可在命令行执行
net start MongoDB启动服务 - macOS/Linux:终端执行
brew services start mongodb-community(brew安装)或sudo systemctl start mongod(系统服务)
3. 验证MongoDB Compass的连接配置
打开Compass,确认你使用的连接字符串和代码中的完全一致:mongodb://localhost:27017/registration。如果Compass能正常连接,说明服务本身没问题,重点排查代码或依赖。
4. 适配Mongoose版本差异
如果你的Mongoose版本和教程差异较大(比如6.x及以上),部分旧配置选项已被废弃,可简化连接代码:
const mongoose = require("mongoose"); async function connectDB() { try { await mongoose.connect("mongodb://localhost:27017/registration"); console.log("connection successful"); } catch (e) { console.error("no connection", e.message); } } connectDB();
Mongoose 6+ 默认启用了useNewUrlParser、useUnifiedTopology等配置,无需手动添加。
5. 排查端口占用问题
确认27017端口未被其他程序占用:
- Windows:执行
netstat -ano | findstr :27017查看占用进程 - macOS/Linux:执行
lsof -i :27017查看占用进程
若端口被占用,停止对应程序,或修改MongoDB的监听端口。
内容的提问来源于stack exchange,提问作者Justcallme Abhi
相关产品推荐
相关产品推荐

