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

时间:2015-10-25 01:22:18

标签: node.js mongodb

在编程时我是个菜鸟。我想了解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();
    });
});

1 个答案:

答案 0 :(得分:0)

在异步操作中抛出错误,除非由promise处理,如果发生错误则不能正确处理错误。根据您的代码,您应该将错误返回到调用代码或使用process.exit退出脚本。我会使用console.error来打印你的错误,这样你就知道你遇到了什么错误。