gpt4 book ai didi

node.js - if (err) throw err 总是显示 process.nextTick(function){throw err;});

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:13 26 4
gpt4 key购买 nike

在编程方面我是个菜鸟。我正在尝试了解 Node.js 和 MongoDB。

下面是我的代码,它将搜索数据库并按州(例如加利福尼亚州、夏威夷州、佛蒙特州等)和最高温度对其进行排序。

当我运行 app.js 时,我总是收到此错误:

process.nextTick(function() { throw err; }); ^ MongoError: server localhost:27017 sockets closed at Server.destroy (D:...\node_modules\mongodb\node_modules\mongodb- core\lib\topologies\server.js:664:47)

根据我的理解,这是因为在我对数据库的 update() 完成之前,游标已到达数据库的末尾。如果我错了,请纠正我。

如何解决这个问题?如果我注释掉直接在 db.collection.update() 调用下的 if (err) throw err; ,那么就没有错误消息(显然),但我想首先防止错误,以便我可以使用 if (err) throw err;

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017/weather', function(err, db) {
if(err) throw err;

var cursor = db.collection('data').find().sort({"State" : 1, "Temperature" : -1});

var newstate = "";
var query = {};

//console.log(docs);
cursor.each(function (err, doc) {
if (err) throw err;

if (doc == null){
return db.close();
}

if (newstate != doc.State) {
//console.log("We are on State: " + doc.State + "\n");
newstate = doc.State;
query['_id'] = doc['_id'];
//console.log("query id is "+query['_id'] + "\n")
var operator = { '$set' : { 'month_high' : true } };
db.collection('data').update(query, operator, function(err, updated) {
if(err) throw err;
console.dir("Successfully updated " + doc.State + " documents.");
return; /*db.close();*/
});
}
//db.close();
});
});

最佳答案

除非由 Promise 处理,否则在异步操作中引发错误并不是处理发生错误的正确方法。根据您的代码,您应该将错误返回到调用代码或使用 process.exit 退出脚本。我会使用 console.error 来打印您的错误,以便您知道遇到了什么错误。

关于node.js - if (err) throw err 总是显示 process.nextTick(function){throw err;});,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33325152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com