我正在使用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,但在数据库中我们看到条目已被删除
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);
}
});
为什么内置回调不起作用?
这是 MongoDB API 5.x+ 版本中的预期行为。
请参阅 MongoDB 文档:升级驱动程序版本:
版本 5.x 重大变更
- 驱动程序删除了对回调的支持,转而采用基于 Promise 的 API。
此更改已在 4.10 版本发布时宣布:
回调弃用回调现在已被弃用,取而代之的是 Promise。回调将在下一个主要版本中删除。
请参阅
文档。
驱动程序删除了对回调的支持,转而采用基于 Promise 的 API。您所说的显示回调方法有效的示例是
旧且过时的。当第三方教程不起作用时,您应该检查官方文档。