mongodb在保存数据时抛出错误(拓扑被破坏)

我正在尝试使用Node.js将数据写入MongoDB在写入数据时,在最后一行中出现以下错误。 执行日志是:

{ _id: 56e90c1292e69900190954f5, nfs: [ 'ebdp1', 'ebdp2', 'ebdp3', 'ebdp4' ], snapShotTime: '2016-03-16 07:32:34' } { [MongoError: topology was destroyed] name: 'MongoError', message: 'topology was destroyed' } 

我的代码结构是根据框架,其中集合的架构在appTableProdSchema.js文件中,以及在appTableProdSchema.js文件中的对象数据。 Main是newMain.js

代码如下:newMain.js

 var mongoose = require('mongoose'); var moment = require('moment'); var nfs_check=""; var promises = []; var nodes = ["ebdp1","ebdp2", "ebdp3", "ebdp4"]; mongoose.connect('mongodb://localhost:27017/test'); var db = mongoose.connection; var storageData = require('./appTableProdData.js'); var storageDataSchema = require('./appTableProdSchema.js'); var obj = {}; obj.snapShotTime = moment().utc().format("YYYY-MM-DD HH:mm:ss"); obj.nfs = nodes; db.once('open', function() { var mongoData = new storageData(); mongoData.fill(obj); var promise = new storageDataSchema(mongoData.getInformation()); console.log(promise.toString()); promise.save(function (err, promise) { if (err) return console.error(err); promise.speak(); }); }); mongoose.disconnect(); 

appTableProdSchema.js

 var mongoose = require('mongoose'); module.exports = mongoose.model('AppTableProd', { snapShotTime : String, nfs: Array }); 

appTableProdData.js

 var storageData = function() { this.data = { snapShotTime: null, nfs: null }; this.fill = function(resp) { this.data.snapShotTime = resp.snapShotTime; this.data.nfs = resp.nfs; }; this.getInformation = function() { return this.data; }; }; module.exports = storageData; 

任何想法为什么我越来越topology destroyed错误? 请帮忙。

你的

 mongoose.disconnect(); 

被召唤之前

 db.once('open', function() { var mongoData = new storageData(); mongoData.fill(obj); var promise = new storageDataSchema(mongoData.getInformation()); console.log(promise.toString()); promise.save(function (err, promise) { if (err) return console.error(err); promise.speak(); }); }); 

这个代码块正在执行,因为它是一个asynchronous调用。

你应该打电话给这个

 mongoose.disconnect(); 

喜欢这个

  db.once('open', function() { var mongoData = new storageData(); mongoData.fill(obj); var promise = new storageDataSchema(mongoData.getInformation()); console.log(promise.toString()); promise.save(function (err, promise) { if (err) return console.error(err); promise.speak(); mongoose.disconnect(); }); }); 

这是一个常见的问题,mongooseasynchronous运行,你不能使用mongoose.disconnect(); 在脚本的末尾,这是一个同步的方式。

Topology destroyed表示当您试图在数据库中插入某些内容时,您正在closures连接。 这是他正在启动的nodejs的行为(并行所有asynchronous进程)。

在这种情况下,尝试删除mongoose.disconnect(); 。 或者在closures连接之前确保没有对mongodb的asynchronous调用。