Nodemon服务因Mongoose连接MongoDB失败崩溃求助
错误原因分析
- MongoDB本地服务未启动:
connect ECONNREFUSED 127.0.0.1:27017错误直接表明本地MongoDB服务未运行,程序无法连接到默认的27017端口。 - 路由回调参数顺序错误:
index.js中/create路由的回调函数把res和req的顺序写反了,会导致后续响应操作异常,加剧服务崩溃。 - Mongoose连接缺乏错误处理:
user.js中的MongoDB连接代码未处理连接失败的情况,无法直观获取连接失败的具体细节。 - 时间默认值设置错误:
userschema中datecreated的default用了Date.now(),会导致所有新创建的文档都使用Schema定义时的时间,而非文档创建时的实时时间。
解决方法
一、启动MongoDB本地服务
根据操作系统执行对应操作:
- Windows:
- 按下
Win + R,输入services.msc打开服务管理器。 - 找到
MongoDB服务,右键点击选择“启动”,可设置为“自动启动”避免手动重复操作。
- 按下
- macOS(brew安装):
终端执行:brew services start mongodb-community - Linux:
终端执行:sudo systemctl start mongod # 部分发行版可使用 sudo service mongod start
验证服务状态:终端执行mongosh,能进入MongoDB命令行界面则说明服务正常运行。
二、修正代码错误
1. 调整路由回调参数顺序
修改index.js中的/create路由代码:
router.get('/create', async function(req, res){ // 修正req和res的顺序 let userdata = await usermodel.create({ username: "shadow", nickname: "Teju", description: "Hello i am a guy who is learning programming", categories: ['js','nodejs','react','gsap','express', 'mongodb'], }) res.send(userdata); })
2. 给Mongoose连接添加错误处理
修改user.js中的连接代码:
const mongoose = require('mongoose'); mongoose.connect("mongodb://127.0.0.1:27017/testing2") .then(() => console.log("MongoDB连接成功")) .catch(err => console.error("MongoDB连接失败:", err)); const userschema = mongoose.Schema({ username: String, nickname: String, description: String, categories: { type: Array, default: [] }, datecreated: { type: Date, default: Date.now // 去掉括号,确保文档创建时获取实时时间 } }) module.exports = mongoose.model("user", userschema)
3. 修正时间默认值
将datecreated的default从Date.now()改为Date.now,确保Mongoose在创建文档时自动生成当前时间,而非使用Schema定义时的固定时间。
三、验证MongoDB Compass连接
打开MongoDB Compass,确认连接字符串为mongodb://127.0.0.1:27017/testing2,点击“Connect”测试连接,成功连接则说明服务和配置均正常。
内容的提问来源于stack exchange,提问作者Tejashv
相关产品推荐
相关产品推荐

