在编程时我是个菜鸟。我想了解Node.js和MongoDB。
下面是我的代码,它将搜索数据库并按州(例如加利福尼亚州,夏威夷州,佛蒙特州等)和最高温度对其进行排序。
当我运行app.js时,我总是收到此错误:
process.nextTick(function(){throw err;}); ^ MongoError:服务器localhost:27017套接字在Server.destroy处关闭 (d:\ node_modules \ MongoDB的\ node_modules \ mongodb- 芯\ lib中\拓扑\ server.js:664:47)
据我了解,这是因为在我对数据库的update()完成之前,游标已到达db的末尾。如果我错了,请纠正我。
如何更正此问题?如果我注释掉直接在db.collection.update()调用下的 if(err)throw err; ,那么就没有错误消息(显然),但我想防止错误首先,我可以使用if(错误)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();
});
});
答案 0 :(得分:0)
在异步操作中抛出错误,除非由promise处理,如果发生错误则不能正确处理错误。根据您的代码,您应该将错误返回到调用代码或使用process.exit退出脚本。我会使用console.error来打印你的错误,这样你就知道你遇到了什么错误。