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

Node.js操作MongoDB遇超时/无报错但数据未入库问题求助

问题分析与解决

一、第一段代码报错:Operation todos.insertOne() buffering timed out after 10000ms

原代码:

const express=require("express");
const { stringify } = require("querystring");
const router= express.Router()
const Db=require("../models/Db")

router.get("/",(req,res)=>{
    res.render("index.hbs");

})
.post("/addData",async(req,res)=>{
    const data=req.body
    console.log(data);
    try{
        const todo= new Db({
            title:req.body.title,
            query:req.body.query,
        })
        const result= await Db.create(todo)
        console.log("data saved")
        console.log(todo.title)
        console.log(todo.query)
    }catch(err){
        console.log(err);
    }
    res.redirect("/")
})

错误原因及解决:

这个超时错误本质是Mongoose未成功建立MongoDB连接,导致数据库操作被缓冲后超时。解决步骤:

  • 检查数据库连接配置:确保项目主文件(如app.js)或../models/Db.js模型文件中,已正确调用mongoose.connect()建立MongoDB连接,且URI、账号密码等参数无误。
  • 优化代码逻辑:Db.create()接收的是数据对象而非模型实例,可直接传入目标数据,无需先创建todo实例,修改为:
const result = await Db.create({
  title: req.body.title,
  query: req.body.query
})

二、第二段代码无报错但无数据存入MongoDB

原代码:

const express=require("express");
const { stringify } = require("querystring");
const router= express.Router()
const Db=require("../models/Db")

router.get("/",(req,res)=>{
    res.render("index.hbs");

})
.post("/addData",async(req,res)=>{
    const data=req.body
    console.log(data);
    try{
        const todo= new Db({
            title:req.body.title,
            query:req.body.query,
        })
        const result= await todo.save
        console.log("data saved")
        console.log(todo.title)
        console.log(todo.query)
    }catch(err){
        console.log(err);
    }
    res.redirect("/")
})


module.exports=router

问题原因及解决:

核心问题是未调用save方法,save是Mongoose模型实例的异步方法,必须添加括号save()才会执行数据库保存操作,仅写todo.save只是引用方法,不会触发任何数据库动作。

修改后的代码片段:

try{
    const todo= new Db({
        title:req.body.title,
        query:req.body.query,
    })
    // 加上()调用save方法
    const result= await todo.save()
    console.log("data saved")
    console.log(todo.title)
    console.log(todo.query)
}catch(err){
    console.log(err);
}

同时需确保数据库连接已正确建立,否则即使调用save()也可能静默失败。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:20:32