web-dev-qa-db-fra.com

Pourquoi le MongoDB Node est-il des erreurs détruites du pool d'instances générant le pilote?

Lorsque j'exécute le code suivant, le message d'erreur suivant s'affiche: "MongoError: le pool d'instances du serveur a été détruit '. Une idée pourquoi ou comment résoudre ce problème?

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();
});
34
ra9r

csv.foreach Et les appels insertOne sont (probablement) tous les deux asynchrones. Vous appelez donc db.close() avant la fin de vos insertions.

Vous devez trouver un moyen d'attendre pour appeler db.close() jusqu'à ce que les rappels de toutes vos insertions aient été appelés. Cela dépend de la manière dont votre module csv fonctionne, mais utiliser quelque chose comme module asynchrone peut vous aider à contrôler le flux asynchrone.

52
JohnnyHK

J'ai le même problème, après avoir appelé 'db.close ()' avec async npm, ce problème est résolu.

0
Kathy