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

本地Ubuntu环境下Node.js连接MongoDB后无法插入数据的问题排查

Node.js MongoDB插入数据无输出问题的分析与解决

你遇到的问题是典型的异步操作时序错误,咱们一步步拆解清楚:

问题原因

你代码里的insertOne是异步方法,它的执行不会阻塞后续代码的运行——也就是说,当你调用db.close()的时候,数据库的插入操作可能还在后台执行,连接一被强制关闭,插入操作直接中断,回调函数里的console.log('data inserted')和JSON输出自然就没机会执行了。这也是为什么你只看到Connected to MongoDB server的原因:这行代码是同步打印的,而插入操作的回调还没触发就被切断了连接。

修复方案

把db.close()移到insertOne的回调函数内部,确保只有当插入操作完成(不管成功还是失败)之后,再关闭数据库连接。修改后的代码如下:

const MongoClient = require('mongodb').MongoClient;
MongoClient.connect('mongodb://localhost:27017/TodoApp', (err, db) => {
  if (err) {
    return console.log('Unable to connect to MongoDB server');
  }
  console.log('Connected to MongoDB server');
  db.collection('Todos').insertOne({
    text: 'Something to do',
    completed: false
  }, (err, result) => {
    if (err) {
      console.log('Unable to insert todo', err);
      db.close(); // 插入失败时也关闭连接
      return;
    }
    console.log('data inserted');
    console.log(JSON.stringify(result.ops, undefined, 2));
    db.close(); // 插入成功完成后关闭连接
  });
});

额外说明

针对你使用的mongodb@2.2.5这个老版本驱动,回调是标准的异步处理方式。如果后续你升级到3.x及以上版本的驱动,可以改用async/await语法,代码会更简洁易读,也能从根源上避免这类时序问题,但当前的修改完全适配你现有的环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:52:41