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

标签 javascript node.js 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' }

我的代码结构是根据框架,其中 Collection 的模式在 appTableProdSchema.js 文件中,而对象数据在 appTableProdData.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();
    }); 
});

此代码块正在执行,因为它是一个异步调用。

你应该这样称呼

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

关于javascript - mongodb 在保存数据时抛出错误(拓扑被破坏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36029595/

相关文章:

使用 Passport 和 typescript : cannot find req. 用户的 Node.js 身份验证

node.js - hyperledger-fabric "Writing your first Application"query.js 步骤失败

javascript - 从主方法调用并包含 http 请求授权的子方法的单元测试

javascript - 如何使用nodejs在mongodb集合中搜索重音字符

c# - 如何使用 mongo c# 驱动程序更新数组/列表中的项目?

node.js - 更新 MongoDB 文档(在 NodeJS 中)

javascript - 标签输入字段不适用于 Turbolinks

javascript - 当选择的元素发生变化时,Rails 更新表单的内容

javascript - Object.getPrototypeOf(classInstance) 返回 Object {}

javascript - 使用 href 时图像消失