Подтвердить что ты не робот

Почему MongoDB Node Драйвер генерирует пул экземпляров уничтоженных ошибок?

Когда я запускаю следующий код, я получаю сообщение об ошибке " MongoError: пул экземпляров сервера был уничтожен". Любая идея, почему и как это исправить?

var csv = require('./importer.js');
var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var ObjectId = require('mongodb').ObjectID;
var url = 'mongodb://.....';


MongoClient.connect(url, function(err, db) {

    assert.equal(null, err);
    console.log("Connected correctly to server.");

    csv.foreach('data/airports.csv', function(airport){
        db.collection('airports').insertOne(airport, function(err, result) {
            if(err) {
                console.log(err)
            } else {
                console.log("Inserted: " + airport.ident);
            }
        });
    });

    db.close();
});
4b9b3361

Ответ 1

csv.foreach, а вызовы insertOne являются (предположительно) и асинхронными, поэтому вы вызываете db.close() до завершения ваших вставок.

Вам нужно придумать способ ожидания вызова db.close(), пока не будут вызваны все обратные вызовы ваших вставок. Как это сделать, зависит от того, как работает ваш модуль csv, но используя что-то вроде асинхронного модуля, может помочь с управлением потоком асинхронизации.

Ответ 2

У меня та же проблема, после вызова db.close() вместе с async npm, эта проблема решена.