You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:18:04