【问题标题】:if (err) throw err always shows process.nextTick(function){throw err;});if (err) throw err 总是显示 process.nextTick(function){throw err;});
【发布时间】:2015-10-25 01:22:17
【问题描述】:

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

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

当我运行 app.js 时,我总是得到这个错误:

process.nextTick(function() { throw err; }); ^ MongoError: server localhost:27017 sockets close at Server.destroy (D:...\node_modules\mongodb\node_modules\mongodb- 核心\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();
    });
});

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-02-23
      • 2015-06-09
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 2016-09-05
      相关资源
      最近更新 更多