开发站点注册功能时Mongoose报insertOne缓冲超时错误如何解决?
从你的日志可以看到已经打印了not connected,说明Mongoose一开始就没有成功连接MongoDB,后续执行user.save()时操作被缓冲等待连接,超过10秒没有连接成功就抛出了这个超时错误,按以下顺序排查即可:
- 先修正连接参数的拼写错误
你的配置里写的userNewUrlPaser是拼写错误,正确参数名是useNewUrlParser,错误的配置会导致连接逻辑异常,修正后的连接代码如下:mongoose.connect(process.env.MONGO_URL, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, }) .then(() => { console.log('Connected to MongoDB'); }) .catch((e) => { // 这里可以打印e看具体报错原因,方便排查 console.log('not connected', e); }); - 检查MongoDB连接地址是否正确
在mongoose.connect执行前添加一行console.log('MONGO_URL:', process.env.MONGO_URL),确认环境变量加载正常:- 如果是本地MongoDB,地址格式应为
mongodb://localhost:27017/你的数据库名 - 如果是MongoDB Atlas等云端服务,确认连接串中的账号、密码、集群地址都填写正确,特殊字符需要做URL转义
- 如果是本地MongoDB,地址格式应为
- 确认MongoDB服务可访问
- 本地部署的MongoDB:确认服务已经正常启动,可通过
mongosh命令行工具尝试连接验证 - 云端部署的MongoDB:确认你的设备公网IP已经加入服务的访问白名单,端口没有被防火墙拦截
- 本地部署的MongoDB:确认服务已经正常启动,可通过
- 代码优化建议(不影响当前报错,但属于规范写法)
new User()是同步操作,不需要加await,修正后写法:const user = new User({ username: 'samson', email: 'samson@gmail.com', password: '123456', });- 注册属于数据写入操作,建议使用
POST而不是GET请求,后续上线前要对密码做bcrypt等加密处理,禁止明文存储密码。
内容的提问来源于stack exchange,提问作者Babatunde Samson O. Bigsam
相关产品推荐
相关产品推荐

