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

Mongoose导入JSON文件时出现buffering timed out超时错误如何解决

错误原因

该报错的核心原因是调用save()方法时Mongoose还未与MongoDB建立成功连接:

  • 你的数据库连接逻辑写在服务入口文件中,是异步执行的,而路由文件中的importData()是脚本加载后立刻同步执行的,执行顺序早于Mongoose连接成功的回调。
  • 如果你是单独运行该路由文件做数据导入,该文件内根本没有执行mongoose.connect()的逻辑,Mongoose一直处于未连接状态,所有数据库操作都会进入缓冲队列,超过默认10秒就会抛出超时错误。
  • POST请求能正常入库是因为请求是在服务启动、Mongoose连接成功之后才接收的,此时数据库连接已经就绪,所以操作不会超时。

可行解决方案

  • 方案1:将导入逻辑放到数据库连接成功的回调中执行
    如果你需要服务启动时自动执行导入,直接把导入逻辑挪到mongoose.connect()的then回调中,修改入口文件代码:
    // 先引入导入方法
    const { importData } = require('./routers/people')
    mongoose.connect('mongodb://localhost:27017/people').then(async () => {
      console.log('Connected to mongoDB');
      // 连接成功后再执行导入
      await importData()
      app.listen(port, () => {
        console.log(`App is listening at port ${port}`);
      });
    });
    
    同时修改路由文件,导出importData方法,删除文件中直接调用importData()的代码:
    // 删掉这行:importData()
    module.exports = { router, importData }
    
  • 方案2:编写独立的导入脚本
    如果你只需要单次导入数据,不想每次启动服务都执行导入逻辑,可以单独写一个导入脚本:
    const fs = require('fs/promises')
    const mongoose = require('mongoose')
    const Person = require('./models/people')
    
    const importData = async () => {
      // 先建立数据库连接
      await mongoose.connect('mongodb://localhost:27017/people')
      console.log('数据库连接成功,开始导入数据')
      
      const data = await fs.readFile('./people.json')
      const dataParsed = JSON.parse(data)
      // 推荐用insertMany批量插入,比循环save效率高很多
      await Person.insertMany(dataParsed)
      console.log('数据导入完成')
      // 导入完成后断开连接
      await mongoose.disconnect()
    }
    importData().catch(err => console.error('导入失败:', err))
    
    直接运行该脚本即可完成导入,不需要启动web服务。
  • 方案3:临时调高缓冲超时时间(不推荐,治标不治本)
    如果确认连接逻辑没问题只是连接建立较慢,可以在连接时配置延长超时时间:
    mongoose.connect('mongodb://localhost:27017/people', {
      bufferTimeoutMS: 30000 // 改为30秒超时
    })
    

内容的提问来源于stack exchange,提问作者crazyfrog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:15:04