当我运行以下代码时,我收到错误消息' 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();
});
答案 0 :(得分:45)
csv.foreach
和insertOne
来电(大概)都是异步的,因此您需要在插入完成之前调用db.close()
。
您需要提出一种等待db.close()
致电的方式,直到所有插入内容为止。{p>已经调用了回调。如何做到这一点取决于你的csv模块如何工作,但使用async module之类的东西可以帮助实现异步流控制。
答案 1 :(得分:0)
我有一个同样的问题,在与异步npm一起调用'db.close()'之后,此问题得以解决。
答案 2 :(得分:0)
尝试使用for...of
代替forEach
。尽管我正在使用async / await,这解决了我的问题。