【问题标题】:MongoError: topology was destroyed(when finding the documents) and instance pool was destroyed (when inserting documents)MongoError:拓扑被破坏(查找文档时)和实例池被破坏(插入文档时)
【发布时间】:2016-12-15 18:11:56
【问题描述】:

我正在尝试使用 Node.js、Express 和 Mongodb 构建 REST API。我正在使用 mongodb npm 包连接数据库,下面是我的 sever.js 文件代码

var express = require("express");
var app = express();
var bodyParser = require("body-parser");
var port = process.env.PORT || 8080;
var mongo = require("mongodb");
var Server = mongo.Server;
var Db = mongo.Db;
var ObjectID = mongo.ObjectID;
try{    
    var config = require('./configure.js');
}catch(e){
    console.log("configuration file is hidden on github for security");
    config = null;
}
var usersCollection = config.usersCollection;
var login = require('./routes/login/index.js');
var signup = require('./routes/signup/index.js');
var Database = new Db(process.env.DBNAME || config.DBNAME , new Server(process.env.DBHOST || config.DBHOST, process.env.DBPORT || config.DBPORT, {'native_parser': true}));


Database.open(function (err, mongoclient) {
        if(err){
            console.log("Failed to connect to the database. Please Check the connection");
            throw err;
        }else{
            Database.authenticate(process.env.DBUSER || config.DBUSER, process.env.DBPASS || config.DBPASS, function(err, res) {
                if (err) {
                    console.log("Authentication Failed"); 
                    throw err; 
                }else{
                    console.log("Connected to the database Successfully");
                    app.use(bodyParser.urlencoded({ extended: true }));
                    app.use(bodyParser.json());
                    var users = Database.collection(usersCollection);
                    login(app,users);
                    signup(app,users);

                    Database.close();
                }
            });
        }
    });

app.listen(port,function(){
    console.log("Server Started Listening to port : "+port);
});

路由/登录/index.js

module.exports = function(app,users){
app.route('/login')
   .post(function(req,res){
        var username = req.body.username;
        var password = req.body.password;
        var query = {'FirstName':username};

        users.find().toArray(function(err,docs){
            if(err){
                throw err;
            }else{
                console.log("no err");
                if(doc.LastName == password){
                    res.send({status : true});
                }else{
                    res.send({status : false});
                }
            }
        });
   });

}

和路由/signup/index.js

module.exports = function(app,users){
app.route('/signup')
   .post(function(req,res){
        var doc = { EmpNo:"1",
                    FirstName:"Andrew",
                    LastName:"Neil",
                    Age:"30",
                    Gender:"Male",
                    Skill:"MongoDB",
                    Phone:"408-1234567",
                    Email:"Andrew.Neil@gmail.com",
                    Salary:"80000"
        };

        users.insert(doc,function(err,info){
            if(err){
                throw err;
            }else{
                console.log('Successfully inserted ' + JSON.stringify(info));
                res.send({result: 'done'});
            }
        });
    });

}

当我尝试在 server.js 中插入文档时,我能够成功插入它们,但是通过 routes/signup/index.js 如果我尝试在server.js 没有错误,但如果我尝试从 routes/login/index.js 执行此操作,那么由于拓扑被破坏,我会收到错误。

需要帮助来解决它。

【问题讨论】:

    标签: javascript node.js mongodb rest mean-stack


    【解决方案1】:

    如果在过程中间以某种方式切断连接,则会引发这些错误。

    因为 users.find()users.insert() 函数都是异步的,所以您的 server.js 文件会到达 Database.close() 函数并在完成该过程之前关闭与数据库的连接,从而给出错误。

    【讨论】:

    • 我明白了,我删除了 Database.close() 语句,它工作正常。谢谢。
    猜你喜欢
    • 2015-09-03
    • 2015-07-09
    • 2020-10-23
    • 2016-12-27
    • 2021-04-30
    • 2018-08-31
    • 2015-08-06
    相关资源
    最近更新 更多