mongodb nodejs在promises中处理回调

q3aa0525  于 2023-10-16  发布在  Go
关注(0)|答案(3)|浏览(75)

我正在整理node.js,但无法理解为什么一个可以工作,另一个不行
你能解释一下为什么这是有效的吗:

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!');
          } 
        });

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

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");

到底是我错过了什么,还是我的系统有问题?
这下面是一个非常简单的例子回调从chatgpt工程

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);
  }
});

为什么内置的回调不工作?

qnakjoqk

qnakjoqk1#

这与Node.js无关,一切都与MongoDB驱动程序有关。
参见文档。
该驱动程序删除了对回调的支持,转而支持基于承诺的API。
你说你看到的例子,显示了回调方法的工作,是旧的和过时的。当第三方教程不起作用时,您应该检查官方文档。

o2rvlv0m

o2rvlv0m2#

这是MongoDB API 5.x+版本中的预期行为。
参见MongoDB文档:升级驱动程序版本:

5.x版重大变更

  • 该驱动程序删除了对回调的支持,转而支持基于承诺的API。

这一变化已经在4.10版本发布时宣布:

回调弃用

回调现在被弃用,取而代之的是Promises。回调将在下一个主要版本中删除。

pxiryf3j

pxiryf3j3#

我的“mongodb”:“^6.0.0”和mongodb已经从这个文档mongo release doc中删除了5.0.0的回调,得出的结论是这是回调到db不工作的原因。如果有人有其他原因请分享

相关问题