我将node.jsBundle 在一起,但不能理解为什么一个文件可以工作,而另一个文件不能

你能给我解释一下为什么吗 这是可行的:

 app.delete('/notes/:id', (req, res) => {
        const id = req.params.id;
        const details = { '_id': new ObjectID(id) };
        db.collection('note')
        .deleteOne(details)
        .then((result) => res.send(result))
        .catch((err) => {
          !error.logged && logger.error('Mongo error', err);
          error.logged = true;
          throw err;
        });
      });

但是这永远不会进入回调函数,并停留在deleteOne中,但是在db中我们看到条目被删除了.

app.delete('/notes/:id', (req, res) => {
        const id = req.params.id;
        const details = { '_id': new ObjectID(id) };
        db.collection('note').deleteOne(details, (err, item) => {
          if (err) {
            res.send({'error':'An error has occurred'});
          } else {
            res.send('Note ' + id + ' deleted!');
          } 
        });

还有,我看到的所有例子,他们说下面的代码应该可以工作,但它从来没有进入回调,它确实建立了数据库连接,我可以在数据库日志(log)中看到

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
console.log("hello");
MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("mydb");
  var myobj = { name: "Company Inc", address: "Highway 37" };
  dbo.collection("customers").insertOne(myobj, function(err, res) {
    if (err) throw err;
    console.log("1 document inserted");
    db.close();
  });
}); 
console.log("bye");

我到底遗漏了什么,还是我的系统有问题?

下面是一个非常简单的来自chat gpt Works的回调示例

const fs = require('fs');

// Function to read a file asynchronously and invoke a callback when done
function readFileAsync(filePath, callback) {
  fs.readFile(filePath, 'utf8', (err, data) => {
    if (err) {
      callback(err, null); // Pass the error to the callback
    } else {
      callback(null, data); // Pass the data to the callback
    }
  });
}

// Example usage of the readFileAsync function
const filePath = 'example.txt';

readFileAsync(filePath, (err, data) => {
  if (err) {
    console.error('Error reading the file:', err);
  } else {
    console.log('File content:', data);
  }
});

为什么内置回调不起作用?

推荐答案

这与Node.js无关,而与MongoDB驱动程序有关.

请参见the documentation.

驱动程序取消了对回调的支持,转而支持基于promise 的API.

您所看到的显示回调方法有效的示例有old and out of date个.当第三方教程不起作用时,您应该判断官方文档.

Node.js相关问答推荐

如何使用MongoDB在Node.js 中向数组中添加项?

当变量在另一个文件中初始化时,在初始化错误之前无法访问变量

使用AWS SDK for JavaScript V3将图像从node.js上传到s3 bucket

如何模拟 mysql2 `getConnection`

使用更新版本仍然找到包@angular/fire但不支持原理图

Prisma,只有一个用户的行可以有真值,@@unique(userId, isActive)

我如何保护nodejs中的路由

为什么当我使用waitForSelector时 Puppeteer 导致我的测试套件挂起 30 秒,即使我在页面和浏览器上调用关闭?

看起来这段代码try GET 请求发送的值变为空白

NPM 错误:修复upstream 依赖冲突安装 NPM 包(云功能)

如何在 TypeScript 中输出 Hackerrank 二叉树问题?

如何使用 UglifyJS 缩小文件夹中的多个 Javascript 文件?

Mongoose:查找、修改、保存

在 Node.js 中的两个不同进程之间进行通信

Nodejs 随机免费 tcp 端口

create-react-app,安装错误(找不到命令)

webpack css-loader 在外部样式表的 url() 引用中找不到图像

Passport 的 req.isAuthenticated 总是返回 false,即使我硬编码 done(null, true)

#!/bin/env是什么意思(在 node.js 脚本的顶部)?

大型项目的 NodeJS vs Play 框架