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调用。
- node-zookeeper-client getData只执行一次callback
- 如何使用swagger-ui模块在我的MEAN堆栈项目中显示Swagger JSON文件?
- 错误“临时标题显示”在铬上
- 如何使用AMQP /节点处理大于100个消息
- 为什么打印对象名称是prototype.constructor的名称,而不是nodejs中构造函数的名称?
- 如何testingREST API +客户端MVC应用程序?
- javascript eventemitter多个事件一次
- 找不到模块:错误:无法parsing模块的“组件/应用程序”。 webpack + reactjs问题
- 如何在mongoose中扩展查询对象