使用Mongoose运行代码时出现MongoClient未连接报错如何解决?
错误原因
mongoose.connect()是异步方法,调用后没有等待连接建立完成就直接执行了插入数据、关闭连接的操作fruit.save()同样是异步操作,代码执行到mongoose.connection.close()时,插入逻辑还没执行完成,数据库连接就被提前关闭了- 原生MongoDB的查询写法和Mongoose的用法混用,属于多余逻辑
修复方案
用async/await语法处理所有异步数据库操作,保证连接建立、数据插入完成后再执行后续操作,补充错误捕获逻辑避免未处理的Promise报错,直接使用Mongoose封装的查询方法即可。
修复后的完整代码
const mongoose = require("mongoose"); // 用async函数统一管理异步数据库操作 const runDBOperation = async () => { // 等待数据库连接成功 await mongoose.connect("mongodb://localhost:27017/fruitsDB"); const fruitSchema = new mongoose.Schema({ name: String, rating: Number, review: String }); const Fruit = mongoose.model("Fruit", fruitSchema); const fruit = new Fruit({ name: "Apple", rating: 7, review: "Pretty solid as a fruit" }); // 等待数据插入完成 await fruit.save(); // 插入完成后查询所有水果数据 const allFruits = await Fruit.find(); console.log("Found the following records:"); console.log(allFruits); // 所有操作完成后再关闭连接 await mongoose.connection.close(); } // 捕获全局异步操作错误 runDBOperation().catch(err => console.log("操作异常:", err));
内容的提问来源于stack exchange,提问作者Donald
相关产品推荐
相关产品推荐

