error de lanzamiento mongodb al guardar datos (topología destruida)

Estoy intentando escribir datos en MongoDB usando Node.js Al escribir los datos, aparece el siguiente error en la última línea. Los registros de ejecución son:

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

Mi estructura de código es conforme al marco, donde el esquema de la Colección está en el archivo appTableProdSchema.js , y los datos del Objeto en el archivo appTableProdData.js . El principal es newMain.js

El código es el siguiente: 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; 

¿Alguna idea de por qué topology destroyed error de topology destroyed ? Por favor ayuda.

Tu

 mongoose.disconnect(); 

está siendo llamado antes

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

Este bloque de código se ejecuta ya que es una llamada asíncrona.

deberias llamar a esto

 mongoose.disconnect(); 

Me gusta esto

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

Este es un problema común, mongoose se ejecuta de forma asíncrona, no puede usar mongoose.disconnect(); Al final del script, esta es una forma sincrónica.

Topology destroyed significa que está cerrando la conexión al mismo tiempo cuando intenta insertar algo en la base de datos. Este es el comportamiento de nodejs que está iniciando (en paralelo a todos los procesos asíncronos).

En este caso, intente eliminar mongoose.disconnect(); . O asegúrese de que no haya llamadas asíncronas a mongodb antes de cerrar la conexión.