Mongoose连接MongoDB报错及users.insertOne()超时问题求助
问题排查与解决方法
错误1:openUri()的uri参数为undefined
原因
- dotenv未正确加载.env文件:你的
index.js位于api目录下,默认dotenv.config()会读取当前目录(即api目录)的.env文件,但你的.env在项目根目录,导致无法读取到MONGO变量。 - MongoDB URI含特殊字符未编码:密码
justin@7里的@是MongoDB URI中用户名与密码的分隔符,未编码会导致URI解析异常,间接引发变量读取失败。
解决方法
- 指定.env文件路径:修改
dotenv.config()代码,指向项目根目录的.env文件:dotenv.config({ path: '../.env' }); - 编码URI特殊字符:将密码中的
@替换为URL编码值%40,修改后的MONGO配置为:MONGO=mongodb+srv://justin:justin%407@mern-blog-t.srmbuat.mongodb.net/?retryWrites=true&w=majority&appName=mern-blog-t - 验证变量读取:在
mongoose.connect前添加日志,确认变量是否正确加载:console.log(process.env.MONGO); // 检查输出是否为完整的URI字符串
错误2:users.insertOne()操作缓冲超时10000ms
原因
这是MongoDB连接失败的连锁问题:Mongoose在未建立数据库连接时,会将数据库操作放入缓冲队列,等待10秒后仍未连接成功就会抛出超时错误。
解决方法
修复上述第一个连接问题,确保MongoDB连接成功后,该超时问题会自动消失。
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

